Zend_Form_Element_Captcha不工作

时间:2012-01-15 01:29:09

标签: php zend-framework

显然这是一个常见问题,但我无法弄清楚如何显示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);




    }


}

2 个答案:

答案 0 :(得分:1)

我只有两个可能会有所帮助的想法:

  • 检查以确保您的GD扩展程序已在php中启用。
  

它需要使用TrueType或Freetype支持编译的GD扩展。目前,Zend_Captcha_Image适配器只能生成PNG图像。

  • 您可能需要指定 imgUrl =&gt;
  

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)

检查你的文件权限;我必须在图像写入之前给出组写访问权。