Zend两个提交按钮的名称相同


Zend two submit buttons same name

我构建了一个扩展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();
        ...
    }
}