我正在尝试使用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;
有谁知道为什么我的表格没有显示???
答案 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)
您的表单创建和处理与我的不同之处仅在于两个方面:
我通常在退出方法之前,在所有检查和处理之后在底部的视图中设置表单。
我认为您不必使用else
子句在其中使用$formData
填充表单。对isValid($formData)
的调用“基本上”就是这样做。
仍然很难理解为什么这些会导致你的表格不能呈现,但值得一试。