2011-05-15 57 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')))); 
    } 
} 

现在 login-form.phtml文件我渲染这样的元素:

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

Login Form 

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

</form> 

它给了我以下错误:

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 

如何在外部脚本中渲染元素...

回答

3

您还可以从视图脚本内容是这样的:

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

对于特定元素的部件可以使用在未来的东西:

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

+1确定。它将您的上述答案与标签和textfield一起渲染。我如何分别渲染标签和文本框。谢谢 – Student 2011-05-15 13:38:21

+0

@Student,看看我的变化。 – pltvs 2011-05-15 14:04:35

+1

请注意,$ this-> element-> username中的'element'指的是表单对象,而不是实际的元素。 $ this-> element-> username然后引用Form_Element对象。只是一点编码习惯。 – Martijn 2011-05-15 14:35:52

2

这里是我的完整的解决方案:

Form类在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>