Zend_Form_Element_Captcha无法正常工作

问题描述 投票:1回答:2

显然,这是一个常见问题,但是我无法弄清楚如何显示Zend Captcha图像,它将创建图像并创建隐藏元素,但是image标记从不显示,有人可以解??

这是无效的代码:

<?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);




    }


}
php zend-framework
2个回答
1
投票

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

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

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

  • 您可能要指定imgUrl =>

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。


0
投票

检查您的文件权限; 在写映像之前,我必须授予组写访问权限。

© www.soinside.com 2019 - 2024. All rights reserved.