【问题标题】:How to render form elements in view?如何在视图中呈现表单元素?
【发布时间】:2011-08-25 21:38:39
【问题描述】:

我已经创建了一个这样的表单:

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

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

【问题讨论】:

    标签: php zend-framework forms elements


    【解决方案1】:

    您可以像这样从视图脚本中调用元素:

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

    对于特定的元素组件,您可以使用以下内容:

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

    【讨论】:

    • +1 好的。它与您的上述答案一起呈现标签和文本字段。如何分别渲染标签和文本字段。谢谢
    • 请注意 $this->element->username 中的 'element' 指的是表单对象,而不是实际的元素。 $this->element->username 然后引用 Form_Element 对象。只是一点编码约定。
    • 一段时间后,我找到了一个简短而完整的问题解决方案。另请参阅我的回答.. 谢谢
    【解决方案2】:

    这是我的完整解决方案:

    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
    

    login-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>
    

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 2015-01-24
      • 1970-01-01
      相关资源
      最近更新 更多