ZF2 удалить проверку isEmpty для элемента формы

Мне нужно использовать элемент формы без проверки isEmpty. Это мой код

$this->add(array(
'name' => 'test',
'type' => 'Zend\Form\Element\Number',
'attributes' => array(
'class' => 'form-control',
)
));

Но следующее сообщение проверки дается.

[test] => Array
(
[isEmpty] => Value is required and can't be empty
)

Как я могу удалить это?

1

Решение

Вы можете сделать это, создав новый ValidatorChain, а затем переберите валидаторы, прикрепленные к вашему элементу, и отсоедините Zend\Validator\NotEmpty валидатор. Именно так :

$newValidatorChain = new \Zend\Validator\ValidatorChain;

foreach ($form->getInputFilter()->get('test')->getValidatorChain()->getValidators()
as $validator)
{
//Attach all validators except the \Zend\Validator\NotEmpty one

if (!($validator['instance'] instanceof \Zend\Validator\NotEmpty)) {
$newValidatorChain->addValidator($validator['instance'],
$validator['breakChainOnFailure']);
}
}
$form->getInputFilter()->get('test')->setValidatorChain($newValidatorChain);

Надеюсь, это может помочь.

1

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

Если у вас есть определенный класс формы, добавьте getInputFilterSpecification метод с вашими правилами проверки:

class MyForm extends \Zend\Form\Form
{
public function init() // or __construct() if not using element manager
{
$this->add(array(
'name' => 'test',
'type' => 'Zend\Form\Element\Number',
'attributes' => array(
'class' => 'form-control',
)
));
}

public function getInputFilterSpecification()
{
return [
'test' => [
'required' => false,
]
];
}
}
1

Смотри сюда:
https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Element/Number.php#L95

Вы можете расширить этот класс и перегрузить функцию getInputSpecification и вернуть массив без ‘required’ => true

Как это:

namespace Your\Form\Elements;
use Zend\Form\Element\Number;
class NumberWithoutRequired extends Number{
public function getInputSpecification()
{
return array(
'name' => $this->getName(),
'required' => false,
'filters' => array(
array('name' => 'Zend\Filter\StringTrim')
),
'validators' => $this->getValidators(),
);
}
}

А затем используйте этот класс для ввода в вашу форму вместо оригинального Zend\Form\Element\Number учебный класс

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