在 ZF2 中,我有一个控制器,其操作适用于这样的表单
if ($request->isPost()) {
$this->organizationForm->setInputFilter(new OrganizationFilter());
$this->organizationForm->setData($request->getPost());
if ($this->organizationForm->isValid()) {
// further logic to process
InputFilter
OrganizationFilter
是这样的
class OrganizationFilter extends InputFilter
{
public function __construct()
{
$this->add([
'name' => 'id',
'filters' => [
['name' => 'Int'],
]
]);
$this->add([
'name' => 'name',
'required' => true,
'filters' => [
['name' => 'StripTags'],
['name' => 'StringTrim'],
],
'validators' => [
[
'name' => 'StringLength',
'options' => [
'encoding' => 'UTF-8',
'min' => 3,
'max' => 160
]
]
]
]);
}
}
如果我$this->organizationForm->setInputFilter(new OrganizationFilter())
注释该行,则表单将得到验证,但是使用此行,它不起作用。
如何验证?
我不知道为什么我的代码不起作用,但我用另一种方式解决了它。对于要验证的输入的表单,我实现了InputFilterProviderInterface
.然后在表格中,getInputFilterSpecification()
public function getInputFilterSpecification()
{
return [
'name' => [
'required' => true,
'filters' => [
['name' => 'StripTags'],
['name' => 'StringTrim'],
],
'validators' => [
[
'name' => 'StringLength',
'options' => [
'encoding' => 'UTF-8',
'min' => 3,
'max' => 160
]
]
]
],
// other inputs to filter
];
}
定义要验证的所有输入。通过此实现,我不必在控制器中显式设置过滤器,只需调用$this->form->isValid()
,奇迹就会发生。:-)