我构建了一个扩展zend_form的表单类。我有两个提交按钮:
$like=new Zend_Form_Element_Image('vote');
$like->setImage($config->path->images."up.png")
->setValue(2);
$dislike=new Zend_Form_Element_Image('vote');
$dislike->setImage($config->path->images."down.png")
->setValue(1);
我想要两个具有相同名称和不同值的提交按钮,这样我以后就可以通过控制器中的switch语句访问提交按钮的值:
$submit = $this->_request->getPost('vote');
switch($submit) {
case 'one':
// button one was pressed
break;
case 'two':
}
}
但是,如果我设置了具有相同名称的按钮,最后一个将覆盖第一个,因此只输出一个按钮。
对于file元素,有一个方法setMultifile()可以实现这一点。
我在这里该怎么办?
感谢
Luca
您可以尝试对图像使用数组表示法。
为什么不这样做:
if( $this->_request->isPost() && $yourForm->isValid( $this->_request->getPost() ) ) {
if($yourForm->one->isChecked())
// button one was pressed
elseif($yourForm->two->isChecked())
// button two was pressed
}
正如您所说,第二个同名按钮将覆盖第一个按钮。我能想到的唯一解决方案是为表单使用viewScript并手动添加按钮HTML。
我希望这能有所帮助。
问候,
Garry
这是可能的。你要做的是,你需要每个提交按钮都属于主表单中不同的子表单或字段集
通过这种方式,提交按钮将被命名,您将能够将它们都添加到表单中
然后,每个提交按钮将具有相同的名称。但是,每个提交按钮的完全限定名称仍然不同。
例如
$likeSubform = new Zend_SubForm();
$dislikeSubform = new Zend_SubForm();
$like=new Zend_Form_Element_Image('vote');
$like->setImage($config->path->images."up.png")
->setValue(2);
$dislike=new Zend_Form_Element_Image('vote');
$dislike->setImage($config->path->images."down.png")
->setValue(1);
$likeSubform->addElement($like);
$dislikeSubform->addElement($dislike);
$form->addSubForm($likeSubform, 'like');
$form->addSubForm($dislikeSubform, 'dislike');
//===================================================
echo $form->getSubForm('like')->vote->getName();
//vote
echo $form->getSubForm('like')->vote->getFullyQualifiedName();
//like[vote]
不幸的是,稍后在呈现表单时,ZF附带的ViewHelper
装饰器将使用完全限定的名称来呈现提交按钮。(假设你使用装饰器,大多数人都这样做)
但是,您可以创建自己的ViewHelper
装饰器来覆盖默认值,从而使用非限定名称来呈现表单元素:
class My_Form_Decorator_ViewHelper extends Zend_Form_Decorator_ViewHelper
{
//override default render method
public function render($content)
{
...
$name = $element->getName();
$id = $element->getName();
...
}
}