在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())
发表评论,表单会得到验证,但是使用此行时,它不起作用。
如何验证?
答案 0 :(得分:0)
我无法弄清楚为什么我的代码不起作用,但我以另一种方式解决了它。对于要验证输入的表单,我实现了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()
并发生魔法。 : - )