【发布时间】:2014-04-26 14:30:09
【问题描述】:
我的 ZF2 应用程序中有一个带有选择元素的表单。在 ZF1 中,它会自动添加一个验证器来检查用户是否试图向其发布无效值。
因此,只是为了好玩和咯咯笑,我决定看看如果我使用 Firebug 更改其中一个选项的值然后提交它会发生什么。结果:它以优异的成绩通过了。不用说,这不好。
这里是选择选项的相关代码:
$this->add(array (
'name' => 'role',
'type' => 'Select',
'attributes' => array (
'id' => 'role'
),
'options' => array (
'label' => 'Role:',
'value_options' => $roleOptions,
'column-size' => 'sm-6',
'label_attributes' => array('class' => 'col-sm-2'),
)
));
(注意:$roleOptions 作为参数传入表单)
这是验证器代码的相关部分:
$inputFilter->add($factory->createInput(array (
'name' => 'role',
'filters' => array(),
'validators' => array(
$notEmpty
),
)));
(显然,$notEmpty 是 NotEmpty 验证器的一个实例)
这里发生了什么? ZF2 是否不再添加验证器来确保它收到的值是最初是选项列表的一部分?我现在必须手动添加验证器来选择选项吗?
编辑:我检查了文档,它说选择元素会自动添加一个数组验证器。它应该可以工作,但事实并非如此。我什至尝试在服务器端更改值,结果相同——验证器没有获取无效值。
是的,我正在检查表单是否有效。
编辑 #2:为清楚起见,here's the code for the form in its entirety
【问题讨论】:
-
另一件事:似乎在角色元素上设置输入过滤器的行为删除了内置的 InArray 验证器。不幸的是,删除它也会造成混乱——为了让 $form->bind() 方法正常工作,每个元素都必须有一个输入过滤器集。那我该怎么办?
标签: forms validation zend-framework2 zend-form2 zend-form-select