2011-05-15 18 views
2

は、私はこのようなフォームを作成しました:フォーム要素を表示するにはどうすればいいですか?

class Form_Login extends Zend_Form { 

    public function __construct() { 

     $this->setMethod('post'); 
     $elements = array(); 

     // username 
     $element = $this->addElement('text', 'username', array('label' => 'Username')); 
     $elements[] = $element; 

     // password 
     $element = $this->addElement('password', 'password', array('label' => 'Password')); 
     $elements[] = $element; 

     // submit 
     $element = $this->addElement('submit', 'submit', array('label' => 'Login')); 
     $elements[] = $element; 

     $this->addElements($elements); 
     $this->addDecorator('ViewHelper'); 
     $this->setDecorators(array(array('ViewScript', array('viewScript' => 'authentication/login-form.phtml')))); 
    } 
} 

ログイン-form.phtmlファイルで、私はこのような要素のレンダリング:

Fatal error: Call to a member function getElement() on a non-object in 
/var/www/student/application/views/scripts/authentication/login-form.phtml on line 5 
:それは私に次のエラーを与える

<form action='submitlogin' method='post' id='loginform'> 

Login Form 

<?= $this->form->getElement('username'); ?> 
<?= $this->form->getElement('password'); ?> 

</form> 

外部スクリプトで要素をレンダリングする方法

答えて

3

あなたは、このようなビュースクリプトから要素を呼び出すことができます。特定の元素成分のために

<?= $this->element->username ?> 

を使用すると、次のものを使用することができます

フォームクラス:

<? $el = $this->element->username; ?> 
<label><?= $el->getLabel() ?></label> 
<?= $this->formText($el->getName(), $el->getValue(), $el->getAttribs()) ?> 
+0

+1 OK。上記の答えと一緒にラベルとテキストフィールドを描画しています。ラベルとテキストフィールドを別々にレンダリングするにはどうすればいいですか?ありがとう – Student

+0

@学生、私の変更を参照してください。 – pltvs

+1

$ this-> element-> usernameの 'element'は実際の要素ではなくフォームオブジェクトを参照しています。 $ this-> element-> usernameは、Form_Elementオブジェクトを参照します。ちょっとしたコーディング規則。 – Martijn

2

をここに私の完全なソリューションですin Login.php

class Form_Login extends Zend_Form { 

    /** 
    * Constructor 
    */ 
    public function __construct($options = null) { 

     parent::__construct($options); 

     // Set the method for the display form to POST 
     $this->setMethod('post'); 

     $elements = array(); 

     $element = $this->CreateElement('text', 'username'); 
     $element->setLabel('Username'); 
     $elements[] = $element; 

     $element = $this->CreateElement('password', 'password'); 
     $element->setLabel('Password'); 
     $elements[] = $element; 

     $element = $this->CreateElement('submit', 'submit'); 
     $element->setLabel('Login'); 
     $elements[] = $element; 

     $this->addElements($elements); 

     $this->setElementDecorators(array('ViewHelper')); 

     $this->setDecorators(array(array('ViewScript', array('viewScript' => 'authentication/login-form.phtml')))); 

    } // end construct 


} // end class 

ログイン-form.phtml

<form action=<?= $this->element->getAction() ?> method=<?= $this->element->getMethod() ?> > 


<table> 
    <tr> 
     <td><label><?= $this->element->username->getLabel() ?></label></td> 
     <td><?= $this->element->username; ?></td> 
    </tr> 
    <tr> 
     <td><label><?= $this->element->password->getLabel() ?></label></td> 
     <td><?= $this->element->password; ?></td> 
    </tr> 
</table> 

</form>