Мне нужно использовать элемент формы без проверки 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
)
Как я могу удалить это?
Вы можете сделать это, создав новый 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);
Надеюсь, это может помочь.
Если у вас есть определенный класс формы, добавьте 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,
]
];
}
}
Смотри сюда:
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
учебный класс