2009-08-11 25 views
14

¿Cómo puedo establecer los valores seleccionados para un multiselección dentro de mi controlador? Este es mi código hasta ahoramultiselect, establecer los valores seleccionados por defecto

class Blog_Form_Post extends Zend_Form 
    { 
     public function init() 
     { 
    ... 
      $this->addElement('multiselect', 'categories', array(
       'label'  => 'Categories:', 
       'required' => false, 
      )); 
    ... 

      $form = new Blog_Form_Post(); 
      $categories = new Blog_Model_DbTable_Categories(); 
      $categories = $categories->fetchAll(); 
      foreach ($categories as $category) 
      { 
// Some of the categories needs to selected by default 
       $form->getElement('categories')->addMultiOption($category->ID, $category->name); 


     } 

Editar para ser más claros. Estoy tomando el ejemplo de Aron Rotteveel

$multi->setMultiOptions(array(
    'foo' => 'Foo', 
    'bar' => 'Bar', 
    'baz' => 'Baz', 
    'bat' => 'Bat', 
)); 

Quiero Foo y Bar ser seleccionado mientras Baz y Bat debe ser seleccionada cuando se procesa el formulario. IE

<select name="categories[]" id="categories" multiple="multiple"> 
    <option selected="selected" value="foo">foo</option> 
    <option selected="selected"value="bar">bar</option> 
    <option value="baz">baz</option> 
    <option value="bat">bat</option> 
</select> 
+0

Estoy enfrentando el mismo problema con zf2, ¿me puede ayudar si tiene alguna idea? – Sarang

Respuesta

20

Usted puede pasar una matriz de valores a setValue().

Los valores en la matriz deben corresponder a las claves que se pasaron al configurar las multiOpciones.

$multi->setMultiOptions(array(
    'foo' => 'Foo', 
    'bar' => 'Bar', 
    'baz' => 'Baz', 
    'bat' => 'Bat', 
)); 

$multi->setValue(array('foo', 'bar')); 

From the ZF manual:

Para marcar confirmados, se necesita pasar una matriz de valores para setValue().

+0

Disculpe, no sé si mi publicación no está clara o si acaba de malinterpretar la publicación. Pero quiero establecer algunas de las opciones como seleccionadas. Por ejemplo, si usamos tu código. Quiero que Foo y Bar sean seleccionados, y Baz y Bat que no sean seleccionados. – unkownt

+0

Esto es exactamente lo que hace el código anterior. –

+1

No veo ninguna mención de setValue() en la documentación. Has vinculado el multiCheckbox, pero no el multiselect. http://framework.zend.com/manual/1.12/en/zend.form.standardElements.html#zend.form.standardElements.multiselect – Jared

2

lo general el uso setDefaults() en la forma - también se puede utilizar setValue() en el elemento, pero se ajusta "opciones seleccionadas" una de selección múltiple como una matriz de identificadores seleccionados (al igual que lo vuelve a un valor).

$categories = // model funciton to get selected categories for this entry. 
$selected=array(); 
foreach ($categories as $category) 
{ 
    $selected[] = $category->ID; 
} 
$form->setDefaults(array('categories' => $selected)); 
+0

Gracias por su respuesta, pero la respuesta de Arons es mucho más hermosa – unkownt

+0

Soy Todavía me pregunto por qué vale la pena mencionar el downvote ... $ form-> setDefaults(); también le permitirá establecer múltiples valores de formulario a la vez. – gnarf

+0

No te he votado, así que no sé. ¿Para qué vale todo esto? – unkownt

0

Si prefiere pasar las opciones de serie en lugar de utilizar elementos discretos, también se puede hacer esto:

$this->addElement('select', 'element_name', array(
    'label'=>'Element Label', 
    'value'=> array('value_name'=>'Value Label', 
    'multiOptions' => array(
     'value_name'=>'Value Label', 
     'value_name_2'=>'Value Label 2', 
     'value_name_3'=>'Value Label 3', 
)); 

La parte importante es la clave 'valor' de la matriz $ options.

Esto hará que se seleccione el primer elemento.

Cuestiones relacionadas