1

私は最近zendを使用しています。私はこのViewScriptデコレータをフォーム用に発見し、従来のZendフォームデコレータを使用する代わりの最良の方法だと思いました。しかし、フォームの表示に問題があります。コードは機能しましたが、ビューから表示されません。

これが私のコードです:

形:

class Application_Form_Registration extends Zend_Form
{
    public function init()
    {   
        $username = new Zend_Form_Element_Text("username");
        $submit = new Zend_Form_Element_Submit("submit");
        $this->setAction("/test.php");
        $this->setMethod("get");
        $this->addElements(array($username, $submit));
        $this->setElementDecorators(array(
          array('ViewScript', array(
            'viewScript'=>'test.phtml'
          ))
        ));
    }
}

コントローラ:

class IndexController extends Zend_Controller_Action
{
    public function init()
    {
    }

    public function indexAction()
    {
        $form = new Application_Form_Registration();
        $this->view->form = $form;

    }
}

test.phtml(My ViewScript)

<form action="<?php $this->escape($this->form->getAction()); ?>">
<div style="width: 100px; height: 100px; background: blue;">
    <?php echo $this->element->username; ?>
    <?php echo $this->element->submit; ?>
</div>
</form>

そして私の見解(index.phtml)

<?php echo $this->form; ?>

私は何かを見逃したり、上記のコードを間違えたりしましたか?

4

2 に答える 2

3

交換

  $this->setElementDecorators(array(
              array('ViewScript', array(
                'viewScript'=>'test.phtml'
              ))
            ));

$this->setDecorators(array(
              array('ViewScript', array(
                'viewScript'=>'test.phtml'
              ))
            ));

基本的にデフォルトのデコレータ「ViewHelper」をオーバーライドしているため、表示するものはありません。

フォーム(htmlフォームタグ)とフォーム要素(入力タイプのテキスト、ラジオなど)はどちらも、デコレータを使用して自分自身を表示します。Zend_FormインスタンスでsetElementDecoratorsを呼び出すことにより、フォームデコレータではなくフォーム要素デコレータをオーバーライドするため、代わりにsetDecoratorsを使用する必要があります。

于 2012-04-01T10:56:37.263 に答える
1

信じられないかもしれませんが、element-> getActionを使用して部分的にgetActionにアクセスし、それをエコーすることを忘れないでください。

//test.php
<form action="<?php echo $this->escape($this->element->getAction()); ?>">
<div style="width: 100px; height: 100px; background: blue;">
    <?php echo $this->element->username->render(); ?>
    <?php echo $this->element->submit->render(); ?>
</div>
</form>

ビューは次のようになります。

//index.phtml
<?php echo $this->form ?>
于 2012-04-01T10:41:49.767 に答える