2009-08-11 10 views
14

Comment puis-je définir les valeurs sélectionnées pour un multisélect dans mon contrôleur? Ce est mon code jusqu'à présentmultisélectionner, définir les valeurs sélectionnées par défaut

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


     } 

Modifier pour être plus clair. Je prends l'exemple de Aron Rotteveel

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

Je veux Foo et Bar à sélectionner tout Baz et Bat doit être désactivée lorsque le formulaire est rendu. 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

Suis le même problème avec zf2, pouvez-vous s'il vous plaît me guider si vous avez une idée. – Sarang

Répondre

20

Vous pouvez passer un tableau de valeurs à setValue().

Les valeurs du tableau doivent correspondre aux clés transmises lors de la définition des multiOptions.

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

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

From the ZF manual:

Pour marquer les éléments vérifiés, vous devez passer un tableau de valeurs à setValue().

+0

Désolé, je ne sais pas si mon message n'est pas clair ou si vous avez mal compris le message. Mais je veux définir certaines des options comme sélectionnées. Par exemple si nous utilisons votre code. Je veux que Foo et Bar soient sélectionnés, et Baz et Bat non sélectionnés. – unkownt

+0

C'est exactement ce que fait le code ci-dessus. –

+1

Je ne vois aucune mention de setValue() dans la documentation. Vous avez lié la multiCheckbox, mais pas le multiselect. http://framework.zend.com/manual/1.12/fr/zend.form.standardElements.html#zend.form.standardElements.multiselect – Jared

2

J'utilise habituellement setDefaults() sur le formulaire - vous pouvez également utiliser sur l'élément setValue(), mais vous définissez un « options sélectionnées » sélectionner plusieurs de comme un tableau de ids sélectionnés (tout comme il revient pour une valeur).

$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

Merci pour votre réponse mais la réponse d'Arons est beaucoup plus belle – unkownt

+0

Je suis se demandant toujours pourquoi le downvote ... $ form-> setDefaults() mérite une mention - il vous permettra de définir plusieurs valeurs de formulaire à la fois. – gnarf

+0

Je n'ai pas voté pour vous donc je ne sais pas. À quoi sert tout ce vote? – unkownt

0

Si vous préférez passer les options par tableau plutôt que d'utiliser des éléments discrets, vous pouvez aussi le faire:

$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 partie importante est la clé « valeur » du tableau $ options.

Cela entraînera la sélection du premier élément.

Questions connexes