我的ZF2应用程序中有一个表单,其中包含CAPTCHA元素,如下所示:
$this->add(array(
'type' => 'Zend\Form\Element\Captcha',
'name' => 'captcha',
'attributes' => array(
'class'=>'form-control',
),
'options' => array(
'label' => 'Please verify you are human.',
'captcha' => array('class' => 'Dumb')
),
));
我有一个附加到表单的输入过滤器,用于验证表单中的其他元素(名称,电子邮件,消息)。如果将其附加到表单,则在检查是否有效时将忽略CAPTCHA字段的验证。
if ($request->isPost()) {
// set the filter
$form->setInputFilter($form->getInputFilter());
$form->setData($request->getPost());
if ($form->isValid()) { ...
如果我删除了输入过滤器,则CAPTCHA字段被正确验证,但显然其他字段没有验证器。我犯的是什么愚蠢的错误?我必须在输入过滤器中设置“CAPTCHA”验证器吗?
答案 0 :(得分:1)
问题是因为,我假设您在表单上创建了一个名为:
的方法getInputFilter();
覆盖原始的getInputFilter(),
有两种解决方案:
将表单上的函数重命名为getInputFilterCustom()
然后修改:
if ($request->isPost()) {
// set the filter
$form->setInputFilter($form->getInputFilterCustom());
或在当前的getInputFilter()内添加逻辑以验证验证码。
答案 1 :(得分:0)
这是我在ZF2表单中添加验证码图像控件的代码:
$this->add(array(
'name' => 'captcha',
'type' => 'Captcha',
'attributes' => array(
'id' => 'captcha',
'autocomplete' => 'off',
'required' => 'required'
),
'options' => array(
'label' => 'Captcha :',
'captcha' => new \Zend\Captcha\Image(array(
'font' => 'public/fonts/arial.ttf',
'imgDir' => 'public/img/captcha',
'imgUrl' => 'img/captcha'
))
),
));
其他表单元素正在使用输入过滤器中的验证器,但我没有使用任何验证器来使其工作。
我希望这可以帮到你。