zf2 элемент даты не требуется

У меня проблема с Zend Framework 2 и элементом Date. Атрибут, который я пытаюсь сохранить, является DateOfBirth, но этот атрибут может быть пустым. Например, дата неизвестна. Столбец в базе данных допускает NULL. Прикрепленный к нему класс Doctrine имеет атрибут, который позволяет ему знать, что он допускает нулевое значение. Но Zend Framework 2 все еще дает мне эту ошибку:

"Value is required and can't be empty".

Несмотря на то, что я установил обязательный атрибут = false, также allow_empty = true, но ничего не работает.

Attirbute это член вложенного набора полей в форме. Вложенность выглядит следующим образом:

  • UserManagementForm
    • Пользователь (fieldset)
      • Персона (fieldset)
        • DateOfBirth (элемент)

Несколько примеров, которые я попробовал:

Форма не проверяется правильно Zend Framework 2

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

Вот код, который я использую на данный момент. Надеюсь, вы видите то, что мне не хватает. Я не знаю, если это из-за того, что он вложенный, но все остальное работает отлично, только элемент даты доставляет мне неприятности.

UserManagementForm

<?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',
),
));
}
}

?>

Пользователь (Fieldset)

<?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);
}
}

?>

Персона (fieldset)

<?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',
),
));
}
}

?>

0

Решение

‘required’ — это не атрибут элемента, а атрибут валидатора.
Решение состоит в том, чтобы реализовать Zend \ InputFilter \ InputFilterProviderInterface

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]