Вы должны расширить свой класс формы (который уже должен быть производным от sfForm), чтобы переопределить метод render
.
Начиная с symfony 1.4 класс sfForm не имеет метода renderJavascript.Обычно мы используем для всех наших форм и виджетов базовый класс, который определит этот метод и переопределит метод рендеринга
class abstractOurForm extends sfFormDoctrine
{
public function render($attributes = array())
{
return parent::render($attributes).
'<script type="text/javascript">'.$this->renderJavascript().'</script>';
}
public function renderJavascript()
{
//nothing here
}
}
Это добавит тег javascript в конец вашей формы (если он отображается как сгенерированный с помощью echo $form
)
Когда вы переопределяете форму доктрины для реализации функциональности javascript, тесно связанной с формой html (встроенная проверка, интеграция ajax, динамические элементы управления и т. Д.), Просто сделайте что-то вроде этого:
class myWhateverForm extends abstractOurForm
{
public function configure()
{
//your widget & validators config here
}
public function renderJavascript()
{
//here come the JS code
$js = <<<EOT
//example with jquery
$(function() {
$('#myElement').focus(function(){
if (window.console) console.log('you\'ve done it');
});
});
EOT;
return $js;
}
}
Тот же шаблон применяется к нашему виджету, поэтому, если какой-то код javascript специфичен для виджета, его не нужно повторять для каждого класса формы, использующего его.
Надеюсь, это поможет вам!