zend-framework – 自定义zend_form验证码输出?

前端之家收集整理的这篇文章主要介绍了zend-framework – 自定义zend_form验证码输出?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的zend_form中使用验证码.
$captcha_element = new Zend_Form_Element_Captcha(
    'captcha',array('label' => 'Write the chars to the field','captcha' => array(
            'captcha' => 'Image','wordLen' => 6,'timeout' => 300,'font' => DOC_ROOT . '/data/fonts/Vera.ttf','imgDir' => $imagedir,'imgUrl' => $umageurl
        )
    )
);

这产生:

<dt id="captcha-input-label">
    <label for="captcha-input" class="required">Write the chars to the field</label>
</dt>

<dd id="captcha-element">
    <img width="200" height="50" alt="" src="http://sitename.com/captcha/09dd951939c6cdf7fa28f2b7d322ea95.png">
    <input type="hidden" name="captcha[id]" value="09dd951939c6cdf7fa28f2b7d322ea95" id="captcha-id">
    <input type="text" name="captcha[input]" id="captcha-input" value="">
</dd>

然而. – 我需要以下代码(captcha元素单独包装在一些标签中):

<dt id="captcha-input-label">
    <label for="captcha-input" class="required">Write the chars to the field</label>
</dt>

<dd id="captcha-element">
    <div><span>
        <input type="text" name="captcha[input]" id="captcha-input" value="">
    </span></div>
    <div><span>
        <img width="200" height="50" alt="" src="http://sitename.com/captcha/09dd951939c6cdf7fa28f2b7d322ea95.png">
        <input type="hidden" name="captcha[id]" value="09dd951939c6cdf7fa28f2b7d322ea95" id="captcha-id">
    </span></div>
</dd>

我不知道我该怎么做我可以通过使用一些自定义装饰来完成这个吗?或涉及自定义验证码?

这有点棘手,但我准备了一个自定义的Captcha元素.我还需要准备自定义的Captcha装饰器.在这两种情况下,我需要覆盖Zend_Form_Element_Captcha和Zend_Form_Decorator_Captcha中的默认渲染方法.我也删除了Zend_Form_Decorator_Captcha_Word,因为我将其功能直接并入My_Form_Decorator_Captcha.这有两个原因.第一个是表单元素的顺序被改变,即从默认的img,输入隐藏,输入文本到输入文本,img,输入隐藏.第二个原因是需要添加div和span标签.

希望他们会有所帮助:

My_Form_Element_Captcha:

class My_Form_Element_Captcha extends Zend_Form_Element_Captcha {

    public function render(Zend_View_Interface $view = null)     {
        $captcha    = $this->getCaptcha();
        $captcha->setName($this->getFullyQualifiedName());

        $decorators = $this->getDecorators();

        // BELOW IS WHERE THE NEW DECORATOR IS USED

        $decorator = new My_Form_Decorator_Captcha(array('captcha' => $captcha));

        array_unshift($decorators,$decorator);

        $decorator  = $captcha->getDecorator();

        $this->setDecorators($decorators);


        $this->setValue($this->getCaptcha()->generate());

        return Zend_Form_Element::render($view);
    }
}

My_Form_Decorator_Captcha:

class My_Form_Decorator_Captcha extends Zend_Form_Decorator_Captcha {

     public function render($content) {
        $element = $this->getElement();
        if (!method_exists($element,'getCaptcha')) {
            return $content;
        }

        $view = $element->getView();
        if (null === $view) {
            return $content;
        }


        $name = $element->getFullyQualifiedName();

        $hiddenName = $name . '[id]';
        $textName = $name . '[input]';

        $label = $element->getDecorator("Label");
        if ($label) {
            $label->setOption("id",$element->getId() . "-input");
        }

        $placement = $this->getPlacement();
        $separator = $this->getSeparator();

        $captcha = $element->getCaptcha();
        $markup = $captcha->render($view,$element);
        $hidden = $view->formHidden($hiddenName,$element->getValue(),$element->getAttribs());
        $text = $view->formText($textName,'',$element->getAttribs());


        // CHANGE THE ORDER OF ELEMENTS AND ADD THE div AND span TAGS.

        switch ($placement) {
            case 'PREPEND':
                $content = '<div><span>' . $text . '</div></span>' .
                        '<div><span>' . $markup . $hidden . '</div></span>' .
                        $separator . $content;
                break;
            case 'APPEND':
            default:
                $content = $content . $separator .
                        '<div><span>' . $text . '</div></span>' .
                        '<div><span>' . $markup . $hidden . '</div></span>';
        }

        return $content;
    }

}

猜你在找的PHP相关文章