У меня есть странная проблема с проверкой флажка. Это всегда недействительно … Я много читал об этой проблеме, но я не мог найти решение … (Я использую array_keys в валидации) Итак, вот мой код:
class NetworkDevicesAndInterfacesForm extends sfForm { public function configure() { $optionsArr = array('one' => 'One','two' => 'Two'); $this->setWidgets(array( 'devices' => new sfWidgetFormChoice(array( 'expanded' => true, 'multiple' => true, 'choices' => $optionsArr), array('class' => 'checkbox')) )); $this->setValidators(array( 'devices' => new sfValidatorChoice(array( 'choices' => array_keys($optionsArr)), array('required' => 'Please choose something!')) )); $this->widgetSchema->setLabels(array( 'devices' => ' ' )); $this->widgetSchema->setNameFormat('devices[%s]'); } }
Действие:
if ($request->isMethod('post')) { $this->form->bind($request->getParameter('devices')); if ($this->form->isValid()) { $formValues = $this->form->getValues(); $deviceId = $formValues['devices']; } }
При указании «multiple» в параметрах виджета вы должны сделать то же самое для соответствующего валидатора:
$this->setValidators(array( 'devices' => new sfValidatorChoice(array( 'choices' => array_keys($optionsArr), 'multiple' => true ), array('required' => 'Please choose something!')) ));