我需要使用带有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
)
我该如何删除它?
答案 0 :(得分: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 :(得分: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,
]
];
}
}
答案 2 :(得分:0)
看这里: https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Element/Number.php#L95
你可以扩展这个类并重载getInputSpecification函数并返回数组,而不需要'required'=>真
像这样:
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
类