Zend_Captchaは便利だがデコレータが糞(あえて。)なのでこんなことをした。
デザインの都合上Zend_Captchaの画像部分と入力部分を分離してrender()したいが、なんかどうにもならない予感がするのでこんな風にしてみた
form
class Hoge_Form extends Zend_Form{ public function init(){ $this->captcha = new Zend_Form_Element_Captcha(...); $this->captcha->setDecorators(array("captcha")); $this->addElements(array( $this->captcha, ... )); } }
controller
public function hogeAction(){ $this->view->assign("form",new HogeForm()); }
view
<div> <? echo $this->form->captcha ?> </div> <div id="captcha_input_box"></div> <script type="text/javascript"> $(function(){ $("#captcha-input").remove().appendTo("#captcha_input_box"); }); </script>
Decoratorでどうこうするのは諦めて、jQueryで入力要素を移動。