Zend две кнопки отправки с тем же именем - PullRequest
6 голосов
/ 02 июня 2011

Я создал класс формы, расширяющий 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 (), который делает свое дело.

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

спасибо

Luca

Ответы [ 4 ]

2 голосов
/ 02 июня 2011

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

0 голосов
/ 12 июля 2011

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

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

Каждая кнопка отправки будет иметь то же имя.Однако полное имя каждой кнопки отправки будет отличаться.

Например,

$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();

        ...
    }
}
0 голосов
/ 02 июня 2011

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

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

С уважением,

Garry

0 голосов
/ 02 июня 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...