2012-04-01 60 views
1

我與Zend工作剛剛結束。我發現這個ViewScript裝飾器的形式,我發現它是使用 經典Zend表格裝飾器的最佳選擇。但是我在顯示錶單時遇到問題。我得到的代碼工作,但沒有顯示我從視圖中獲得。Zend公司:ViewScript裝飾不會呈現表單元素

這裏是我的代碼:

表:

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(我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; ?> 

難道我錯過了什麼和/或與上面的代碼所做的錯嗎?

回答

3

更換

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

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

你bassically overrided默認裝飾「視圖助手」因此,沒有任何顯示。

兩種形式(HTML形式的標籤)和表單元素(輸入類型文字,廣播等)使用裝飾來顯示自己。通過在Zend_Form實例上調用setElementDecorators,您正在重寫表單元素裝飾器而不是表單裝飾器,因此我們需要使用setDecorators。

+0

謝謝哥們..代碼工作對我來說..但這兩者之間的區別是什麼? – Aldee 2012-04-01 11:02:51

+0

@AldeeMativo更新了我的答案並希望它能夠很好地解釋它。 – 2012-04-01 13:20:47

+0

ahhh ..我知道了..所以當我們使用setElementDecorators時,我們覆蓋了它周圍的所有東西..現在我明白了..謝謝..:D – Aldee 2012-04-01 13:56:58

1

相信與否,你在使用局部元素 - >的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 ?> 
+0

謝謝岩石......我做了什麼,你指示,但仍沒有形成渲染/顯示..有什麼想法? – Aldee 2012-04-01 10:47:01

+0

test.php位於何處? – RockyFord 2012-04-01 10:49:10

+0

在應用/視圖/腳本 – Aldee 2012-04-01 10:49:42