由于输入过滤器,ZF2 表单无法验证
ZF2 form doesn't validate because of input filter
在 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()
即可发生奇迹。 :-)
在 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()
即可发生奇迹。 :-)