Zend Framework:Captcha问题

时间:2011-07-23 10:08:38

标签: zend-framework zend-form zend-form-element

我使用以下代码生成CAPTCHA:

$captcha = $this->createElement('captcha', 'captcha',
    array('required' => true,
    'captcha' => array('captcha' => 'Image',
    'font' => 'resource/fonts/arial.ttf',
    'fontSize' => '24',
    'wordLen' => '5',
    'height' => '50',
    'width' => '150',
    'imgDir' => 'resource/captcha',
    'imgUrl' => 'resource/captcha',
    'gcFreq'=>'10',    
    'dotNoiseLevel' => '10',
    'lineNoiseLevel' => '2')));

    $captcha->setLabel('Captcha');

生成以下代码:

<label for="captcha-input" class="login_label required">Captcha</label>
<img width="150" height="50" alt="" src="captcha/eb3a592c8b1c7a71b0c7ce5179422be2.png" />
<input type="hidden" name="captcha[id]" value="eb3a592c8b1c7a71b0c7ce5179422be2" id="captcha-id">
<input type="text" name="captcha[input]" id="captcha-input" value="">
<input type="text" name="captcha" id="captcha" value="eb3a592c8b1c7a71b0c7ce5179422be2">

有人可以指导我如何删除额外的输入文本字段,如

<input type="text" name="captcha" id="captcha" value="eb3a592c8b1c7a71b0c7ce5179422be2">

提前致谢

4 个答案:

答案 0 :(得分:3)

执行

非常重要
$this->getElement('captcha')->removeDecorator("viewhelper");

之后你启用了ElementsDecorators(它首先设置了ViewHelper - 不要删除它,无论如何都需要它)

对我来说,它看起来像这样:

$this->setElementDecorators(array(
    'ViewHelper',
    'Errors',
    array(array('data' => 'HtmlTag'), array('tag' => 'td')),
    array('Label', array('tag' => 'td')),
    array(array('row' => 'HtmlTag'), array('tag' => 'tr'))
));

$this->getElement('captcha')->removeDecorator("viewhelper");

答案 1 :(得分:0)

这种输入不是“额外的” - 这是必不可少的。

验证CAPTCHA时,该字段的值用于查找CAPTCHA的正确解决方案,然后将其与用户的输入进行比较。

如果没有该字段,您的CAPTCHA将会中断。

为什么要首先删除它?

答案 2 :(得分:0)

你可以试试这个:

$this->getElement('captcha')->removeDecorator("viewhelper");

答案 3 :(得分:0)

我遇到了同样的问题。删除“ViewHelper”装饰器,验证码将正确呈现。