Multiselect, установить выбранные значения по умолчанию

Как установить выбранные значения для мультиселектора в моем контроллере? Это мой код до сих пор

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


        } 

Изменить, чтобы быть более ясным. Я беру пример из Aron Rotteveel

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

Я хочу, чтобы Foo и Bar были выбраны, пока Baz и Bat не должны быть выбраны, когда форма отображается. 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>

Ответы

Ответ 1

Вы можете передать массив значений setValue().

Значения в массиве должны соответствовать ключам, переданным при настройке multiOptions.

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

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

Из руководства ZF:

Чтобы отметить отмеченные элементы, вам необходимо передайте массив значений в setValue().

Ответ 2

Обычно я использую setDefaults() в форме - вы также можете использовать setValue() для элемента, но вы устанавливаете "выбранные параметры" для нескольких элементов в виде массива выбранного идентификатора (точно так же, как он возвращает значение),

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

Ответ 3

Если вы предпочитаете передавать параметры по массиву, а не использовать отдельные элементы, вы также можете сделать это:

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

Важной частью является ключ "value" массива $options.

Это приведет к выбору первого элемента.