显然这是一个常见问题,但我无法弄清楚如何显示Zend Captcha图像,它会创建图像,它会创建隐藏元素,但图像标记永远不会显示,是吗?谁有解决方案?
以下代码不起作用:
<?php
class Application_Form_Contact extends Zend_Form
{
public function init()
{
/* Form Elements & Other Definitions Here ... */
$this->setAction('/contact/')->setMethod('post');
$element = new Zend_Form_Element_Text('name');
$element->setLabel('Name:')
->setRequired(true)
->addFilter('HtmlEntities');
$this->addElement($element);
$element = new Zend_Form_Element_Text('phone');
$element->setLabel('Phone:')
->setRequired(true)
->addFilter('HtmlEntities');
$this->addElement($element);
$element = new Zend_Form_Element_Text('email');
$element->setLabel('Email:')
->setRequired(true)
->addValidator('EmailAddress', true)
->addFilter('StripTags')
->addFilter('HtmlEntities')
->addFilter('StringToLower')
->addFilter('StringTrim');
$this->addElement($element);
$comments = $this->createElement('textarea', 'comments')
->setLabel('Comments:')
->setRequired(true)
->setOptions(array('style'=>'width:95%;'))
->addFilter('StripTags')
->addFilter('HtmlEntities')
->addFilter('StringTrim');
$this->addElement($comments);
$captcha= new Zend_Form_Element_Captcha('captcha', array(
'id'=>'captchas',
'title'=>'Security Check.',
'captcha' => array(
'captcha' => 'Image',
'required' => true,
'font'=> PUBLIC_PATH . '/verdana.ttf',
'wordlen'=>'4',
'width'=>'80',
'height'=>'50',
'ImgAlign'=>'left',
'imgdir'=> PUBLIC_PATH . '/images/captcha/',
'DotNoiseLevel'=>'0',
'LineNoiseLevel'=>'0',
'Expiration'=>'1000',
'fontsize'=>'16'
)));
$this->addElement($captcha);
$submit = new Zend_Form_Element_Submit('submit');
$submit->setLabel('Send');
$this->addElement($submit);
}
}
答案 0 :(得分:1)
我只有两个可能会有所帮助的想法:
它需要使用TrueType或Freetype支持编译的GD扩展。目前,Zend_Captcha_Image适配器只能生成PNG图像。
setImgUrl($ imgUrl)和getImgUrl()允许您指定要用于HTML标记的CAPTCHA图像的相对路径。默认为“/ images / captcha /”。
也仅用于您不需要将元素设置为 必需 的信息,因为始终需要验证码。
如上所述,验证码适配器本身充当元素的验证器。此外,未使用NotEmpty验证器,并将元素标记为必需。在大多数情况下,您只需要在表单中显示验证码即可。
尝试将验证码编辑为裸骨
$captcha = new Zend_Form_Element_Captcha('Captcha', array(
'captcha' => array(
'captcha' => 'Image',
'wordLen' => 6,
'timeout' => 300,
'width' => 300,
'height' => 100,
'imgUrl' => '/captcha',
'imgDir' => APPLICATION_PATH . '/../public/captcha',
'font' => APPLICATION_PATH . '/../public/fonts/LiberationSansRegular.ttf')));
只需获得任何工作,然后添加您需要的内容,直到找到问题为止。我怀疑你的一条路有问题。 从APPLICATION_PATH常量开始,如果感觉更好,则更改为PUBLIC_PATH。
答案 1 :(得分:0)
检查你的文件权限;我必须在图像写入之前给出组写访问权。