2011-06-02 26 views
6

he construido una clase de formulario que se extienden zend_form.I tener dos botones de presentación:Zend dos botones de envío mismo nombre

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

que me gustaría tener dos botones de envío con el mismo nombre y un valor diferente para que pueda más tarde acceder al valor de la presentada por una sentencia switch en el controlador:

$submit = $this->_request->getPost('vote'); 

switch($submit) { 
case 'one': 
// button one was pressed 
break; 
case 'two': 
} 

} 

pero si lo hago fijar los que tienen el mismo nombre que el último está anulando la primera por lo que sólo es un botón de salida.

Con elementos de archivo hay un método setMultifile() que hace el truco.

¿Qué debo hacer aquí?

gracias

Luca

Respuesta

0

Por qué no hacer algo como esto:

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 
} 
+0

tengo más de una forma en mi controlador y quiero verificar específicamente si se publica "voto" .. Tengo el método isChecked como última opción – luca

0

Como se ha indicado segundo botón con el mismo nombre se overide la primera. La única solución que puedo pensar es usar un viewScript para el formulario y agregar el botón HTML manualmente.

Espero que esto ayude.

Saludos,

Garry

2

puede intentar utilizar array notation para las imágenes.

+0

¿podría informar un ejemplo? – luca

0

Es posible. Lo que harías es que necesitarías que cada botón de enviar pertenezca a un subformulario diferente o fieldset dentro del formulario principal.

De esta forma, los botones de envío se asignarán al espacio de nombres, y podrá agregarlos al formulario.

Cada botón de envío tendrá el mismo nombre. Sin embargo, el nombre completo de cada botón de envío seguirá siendo diferente.

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] 

Por desgracia para usted, más tarde, cuando renderiza la forma, el ViewHelper decorador que se incluye con ZF va a hacer que el botón de envío utilizando el nombre completo. (Suponiendo que el uso que decorador, que la mayoría de la gente)

Sin embargo, a continuación, puede crear su propia ViewHelper decorador que anula el valor por defecto, haciendo así que el elemento de formulario utilizando el nombre no calificado en su lugar:

class My_Form_Decorator_ViewHelper extends Zend_Form_Decorator_ViewHelper 
{ 

    //override default render method 
    public function render($content) 
    { 
     ... 

     $name = $element->getName(); 
     $id = $element->getName(); 

     ... 
    } 
} 
Cuestiones relacionadas