Zend Form没有显示在我的phtml页面上

时间:2014-08-03 22:15:41

标签: php zend-framework zend-form

我正在尝试使用Zend Framework 1.12.7构建一个简单的测试应用程序。我有以下代码在名为form的{​​{1}}文件夹中的文件中创建forms

Album.php

然后我将以下代码添加到class Application_Form_Album extends Zend_Form { public function init() { $this->setName('album'); $id = new Zend_Form_Element_Hidden('id'); $id->addFilter('Int'); $artist = new Zend_Form_Element_Text('artist'); $artist->setLabel('Artist') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpy'); $title = new Zend_Form_Element_Text('title'); $title->setLabel('Title') ->setRequired(true) ->addFilter('StripTags') ->addFilter('NotEmpty'); $submit = new Zend_Form_Element_Submit('submit'); $submit->setAttrib('id', 'submitbutton'); $this->addElements(array($id,$artist,$title,$submit)); } } IndexController

addAction()

然后在我的public function addAction() { $form = new Application_Form_Album();//Create the Form Object $form->submit->setLabel('Add');//Set label of Submit button $this->view->form = $form;//Assign view for rendering if($this->getRequest()->isPost()){//If TRUE then form submitted $formData = $this->getRequest()->getPost(); if($form->isValid($formData)){//If VALUD then add record $artist = $form->getValue('artist'); $title = $form->getValue('title'); $albums = new Application_Model_DbTable_Albums(); $albums->addAlbum($artist, $title); $this->_helper->redirector('index');//return to homepage }else{ $form->populate($formData);//INVALID so repopulate the form } } } view中添加了以下代码:

add.phtml

我没有错误和标题"添加新专辑"显示我在此网址时

<?php 
$this->title = "Add new album";
$this->headTitle($this->title);
echo $this->form;

有谁知道为什么我的表格没有显示???

2 个答案:

答案 0 :(得分:1)

好的我已经弄明白了,对于刚刚开始使用Zend的人来说,这可能很有用。无论如何,Zend Framework v1.12创建form的正确方法是对表单的每个addElement使用element方法。因此,在我的原始帖子中包含我的form的正确方法是这样的:

public function init()
    {
        $this->setName('album');
        $this->setMethod('post');

        $this->addElement('hidden', 'id', array(
            'filters'=>array('Int')
        ));

        $this->addElement('text', 'artist', array(
           'label' => 'Artist',
           'required'=> true,
           'filters'=>array('StringTrim','StripTags'),
           'validators'=>array('NotEmpty')
        ));

        $this->addElement('text', 'title', array(
           'label' => 'Title',
           'required'=> true,
           'filters'=>array('StripTags'),
           'validators'=>array('NotEmpty')
        ));

        $this->addElement('submit', 'submit', array(
            'ignore'=>true,
            'label'=>'Create'
        ));
    }

答案 1 :(得分:0)

您的表单创建和处理与我的不同之处仅在于两个方面:

  1. 我通常在退出方法之前,在所有检查和处理之后在底部的视图中设置表单。

  2. 我认为您不必使用else子句在其中使用$formData填充表单。对isValid($formData)的调用“基本上”就是这样做。

  3. 仍然很难理解为什么这些会导致你的表格不能呈现,但值得一试。