Zend form bootstrap annotation datepicker «Объект, предоставленный помощнику Escape, но флаги не позволяют рекурсию»

Я использую 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);