Zend表单引导注释日期选择器”;对象提供给Escape助手,但标志不允许递归;


Zend form bootstrap annotation datepicker "Object provided to Escape helper, but flags do not allow recursion"

我正在使用带有Bootstrap和ReverseForm适配器的Zend框架,它有一个有趣的问题:当我在Zend Form中使用Bootstrap Datepicker时,我有下一个异常:

对象提供给Escape助手,但标志不允许递归

这是我的表单域代码:

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;

还有我的反格式配置:

'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('Y-m-d'));

我不知道这种干净的方法,但它会解决你的问题。如果你能找到另一种方法,我会很高兴看到你的代码。

如果不将类型字段添加到Zend Form:,则会出现类似的问题

'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' => 'e.g 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('d-m-Y');
$form->setData($users);
$form->bind($user);