【发布时间】:2012-05-10 15:01:23
【问题描述】:
我的一个表格有一些必填字段,有些则没有,假设“姓名”是必需的,但“注释”不是:
class Form_CompanyForm extends Zend_Form{
public function init(){
// add element: ID textbox
$ID = $this->createElement('hidden', 'id');
$this->addElement($ID);
// add element: name textbox
$name = $this->createElement('text', 'name');
$name->setLabel('name:');
**$name->setRequired(TRUE);**
$name->setAttrib('size',100);
$name->setAttrib('maxlength',255);
$name->addFilters(array(new Zend_Filter_StringTrim()));
$this->addElement($name);
// add element: note text area
$note = $this->createElement('textarea', 'note');
$note->setLabel('note:');
**$note->setRequired(FALSE);**
$note->setAttrib('cols',50);
$note->setAttrib('rows',4);
$note->addFilters(array(new Zend_Filter_StringTrim()));
$this->addElement($note);
...
我的一个控制器调用此表单并使用其所有字段。这工作正常,并且会验证名称字段。
但是...另一个控制器使用相同的表单,只是为了更改注释...为此,我使用 removeElement() 从表单中删除名称:
public function editcompanynoteAction(){
$mod = new Model_Company();
$frm = new Form_CompanyForm();
$frm->removeElement('name');
$frm->setAction('/companyland/editcompany');
$frm->setMethod('post');
if($this->getRequest()->isPost()){
if($frm->isValid($_POST)){
...
表单显示正常,只有注释字段存在,如预期的那样
但是保存表单后,验证失败,因为“名称”字段是必需的...
我是 Zend 的新手,我不明白为什么表单验证会失败...在一个被删除的元素上。
网上有关于使用 removeElement 的示例...我尝试了 clearValidators() 没有成功,并查看了Zend form validation
评论说“您应该在调用 $form->isValid() 之前删除验证器。”
但是怎么做呢?
您能给我的任何帮助将不胜感激。
【问题讨论】:
-
上面的代码有一个错误,要调用的控制器应该是 '/companyland/editcompanynote' 而不是 '/companyland/editcompany' 这就是我遇到这个问题的原因,一旦更正了在控制器中调用了正确的操作,我没有再遇到这个问题了。
标签: forms zend-framework