Зачем использовать его в классе формы, а не в представлении (и использовать его с ajax) при рендеринге поля?Это при условии, что вы не делаете echo $form
, и вы повторяете каждое поле (метка, ошибка, поле).Если вы делаете echo $form
, вам может потребоваться записать его в классе формы (хотя это относится к представлению, а не к классу, но это еще одна проблема).Просто используйте параметр массива атрибутов, когда вы определяете виджет.Что-то вроде:
$this->widgetSchema['state'] = new sfWidgetFormDoctrineChoice(array(blabla), array('onchange' => 'someJsFunction'));
Если вы хотите также ограничить выбор, то в классах формы (например, чтобы заполнить выбор только штатами США, когда США были выбраны в поле выбора страны),отправьте контекст в форму в качестве опции:
в ваших действиях:
$this->form = new whateverForm(array(), array('context' => $this->getContext()));
в вашей форме сделайте что-то вроде:
$context = $this->getOption('context');
if (!$context instanceOf sfContext) throw new sfException('whateverForm needs the context.. bla bla');
$taintedValues = $context->getRequest($this->getName());
$country = $taintedValues['country'];`
Это даст вам текущую подчиненную страну для отображения штатов только для этой страны.
То же самое с округами.