Я использую Zend framework с адаптером Bootstrap и ReverseForm, и у меня есть интересная проблема: когда я использую Bootstrap Datepicker в форме Zend, у меня есть следующее исключение:
Объект, предоставленный помощнику Escape, но флаги не позволяют рекурсии
Есть мой код formfield:
use \Doctrine\ODM\MongoDB\Mapping\Annotations as ODM; use \Zend\Form\Annotation as ZFA;
…
/** * @var \DateTime * * @ODM\Date * * @ZFA\Type("ReverseForm\Element\BootstrapDatepicker") * @ZFA\Attributes({"type":"text"}) * @ZFA\Options({ * "label":"Date", * "extended": { * "help": {"content": ""}, * } * }) * */ private $date;
и есть моя обратная форма config:
'ReverseForm\Element\BootstrapDatepicker' => array( 'js' => array( '/vendor/datepicker/js/bootstrap-datepicker.js' ), 'css' => array( '/vendor/datepicker/css/datepicker.css' ), 'template' => 'input.phtml', 'inlineJs' => "$('#%1\$s').datepicker(%2\$s);", 'inlineJsConfig' => array( 'format' => 'dd.mm.yyyy', 'weekstart' => new \Zend\Json\Expr(1), ) ),
Где у меня ошибка?
Я была такая же проблема. Изменение типа ввода с text
на date
должно устранить вашу проблему. ( https://github.com/zendframework/zf2/issues/3724 )
Никакая ошибка, по-видимому, не исходила из вашего кода, или, может быть, дело в том, что вам нужно сделать, если editAction не просто связывается, а добавляет:
$form->bind($document); $form->get('datenais')->setValue($document->getDatenais()->format('Ym-d'));
Я знаю не чистый путь, но он решит вашу проблему. Если вы найдете другой способ, я буду рад видеть ваш фрагмент кода.
Это аналогичная проблема с тем, который вы получите, если не добавить поле типа в форму Zend:
'type' => 'Zend\Form\Element\Time',
Весь элемент таков:
$this->add(array( 'name' => 'officialDrawTime', 'type' => 'Zend\Form\Element\Time', 'attributes' => array( 'required' => 'required', 'type' => 'time', 'class' => 'form-control input-large', 'placeholder' => 'eg 19:30 or 07:30 (24 hour clock)', 'pattern' => '^[0-9]{2}:[0-9]{2}$' ), 'options' => array( 'label' => 'Official draw time', 'instructions' => 'The official draw time...)' ), ));
Это работает для меня.
Преобразование значения в формат даты решит проблему.
В вашем контроллере: напишите:
$users['usrBirthday']=$user->getBirthday()->format('dm-Y'); $form->setData($users); $form->bind($user);