我需要使用表单元素而不进行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
)
如何删除它?
看这里: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
类
如果您有特定的表单类,请使用验证规则添加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,
]
];
}
}
你可以通过
创建新的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);