首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不需要zf2日期元素

不需要zf2日期元素
EN

Stack Overflow用户
提问于 2016-01-10 18:56:18
回答 1查看 649关注 0票数 0

ZendFramework2和Date元素有问题。我试图存储的属性是一个DateOfBirth,但是这个属性可能是空的。例如,日期未知。数据库中的列允许NULL。附加到它的Doctrine类有一个属性,让我们知道它允许null。但是2仍然给出了这个错误:

代码语言:javascript
复制
"Value is required and can't be empty".

即使我设置了所需的attribute=false,也设置了allow_empty=true,但是没有任何工作。

将其设置为窗体内嵌套字段集的成员。嵌套方式如下:

  • UserManagementForm
    • 用户(字段集)
      • 人员(字段集)
        • DateOfBirth (元素)

我试过的几个例子:

Form not validating correctly zend framework 2

https://github.com/zendframework/zf2/issues/4302

这是我目前正在使用的代码。希望你能看到我错过的东西。我不知道这是否因为它是嵌套的,但其余的都是完美的,只有日期元素给我带来麻烦。

UserManagementForm

代码语言:javascript
复制
<?php

namespace Application\Form;

use Zend\Form\Form;

class UserManagementForm extends Form
{
    public function __construct()
    {
        parent::__construct('usermanagementform');
        $this->setAttribute('method', 'post');

        $fieldset = new \Application\Form\Fieldset\User();
        $fieldset
            ->setHydrator(new \Zend\Stdlib\Hydrator\ObjectProperty(false))
            ->setObject(new \Application\Entity\User())
            ->setOptions(array('use_as_base_fieldset' => true))
        ;
        $this->add($fieldset);


        $this->add(array(
            'name' => 'btnSubmit',
            'type' => 'submit',
            'attributes' => array(
                'class' => 'btn-primary',
            ),
            'options' => array(
                'column-size' => 'sm-9 col-sm-offset-3',
                'label' => 'Save changes',
            ),
        ));
    }
}

?>

用户(字段集)

代码语言:javascript
复制
<?php

namespace Application\Form\Fieldset;

use Zend\Form\Fieldset;

class User extends Fieldset
{
    public function __construct()
    {
        parent::__construct('User');

        $fieldset = new \Application\Form\Fieldset\EmailAddress();
        $fieldset
            ->setHydrator(new \Zend\Stdlib\Hydrator\ObjectProperty(false))
            ->setObject(new \Application\Entity\EmailAddress());
        $this->add($fieldset);

        $fieldset = new \Application\Form\Fieldset\Person();
        $fieldset
            ->setHydrator(new \Zend\Stdlib\Hydrator\ObjectProperty(false))
            ->setObject(new \Application\Entity\Person());
        $this->add($fieldset);
    }
}

?>

Person (字段集)

代码语言:javascript
复制
<?php

namespace Application\Form\Fieldset;

use Zend\Form\Fieldset;

class Person extends Fieldset
{
    public function __construct()
    {
        parent::__construct('Person');

        $this->add(array(
            'type' => 'date',
            'name' => 'DateOfBirth',
            'required' => false,
            'allowEmpty' => true,
            'options' => array(
                'label' => 'Date of birth',
                'column-size' => 'sm-9',
                'label_attributes' => array(
                    'class' => 'col-sm-3',
                ),
                'format' => 'd-m-Y',
            ),
        ));
    }
}

?>
EN

回答 1

Stack Overflow用户

发布于 2016-01-11 14:44:28

“必需”不是元素的属性,而是验证器属性。解决方案包括实现Zend\InputFilter\InputFilterProviderInterface

代码语言:javascript
复制
use Zend\InputFilter\InputFilterProviderInterface;
class UserManagementForm extends AbstractSbmForm implements InputFilterProviderInterface {
  public function __construct()
  {
   ... without change
  }
  public function getInputFilterSpecification()
  {
    return array(
      'DateOfBirth' => array(
        'name' => 'DateOfBirth',
        'required' => false,
      );
    );
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34709511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档