Zend две кнопки отправки с одинаковым именем

Я создал класс формы, расширяющий 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':
}

}

Но если я устанавливаю те, у которых одно и то же имя, последний переопределяет первый, поэтому выводится только одна кнопка.

С файловыми элементами есть метод setMultifile (), который делает свое дело.

что мне здесь делать?

Благодарность

Лука


person luca    schedule 02.06.2011    source источник


Ответы (4)


Вы можете попробовать использовать для изображений обозначение массива.

person Glen Solsberry    schedule 02.06.2011
comment
не могли бы вы сообщить пример - person luca; 05.06.2011

Почему бы не сделать что-то вроде этого:

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
}
person Arek Jablonski    schedule 02.06.2011
comment
У меня более одной формы в моем контроллере, и я хочу специально проверить, размещено ли голосование ... У меня есть метод isChecked в качестве последнего варианта - person luca; 02.06.2011

Как вы заявили, вторая кнопка с тем же именем будет иметь приоритет над первой. Единственное решение, которое я могу придумать, - это использовать viewScript для формы и вручную добавить кнопку HTML.

Надеюсь, это поможет.

С уважением,

Гарри

person Garry    schedule 02.06.2011

Возможно. Вам нужно, чтобы каждая кнопка отправки принадлежала другой подчиненной форме или набору полей в основной форме.

Таким образом, кнопки отправки будут помещены в пространство имен, и вы сможете добавить их обе в форму.

Тогда каждая кнопка отправки будет иметь одно и то же имя. Однако полное имя каждой кнопки отправки по-прежнему будет другим.

E.g.

$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]

К сожалению для вас, позже, когда вы визуализируете форму, декоратор ViewHelper, поставляемый с ZF, будет отображать кнопку отправки с использованием полного имени. (при условии, что вы используете этот декоратор, что и делает большинство людей)

Однако затем вы можете создать свой собственный 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();

        ...
    }
}
person asgeo1    schedule 12.07.2011