多选,设置默认选定值

unk*_*wnt 14 zend-framework

如何在控制器中设置多选的选定值?到目前为止这是我的代码

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


        } 
Run Code Online (Sandbox Code Playgroud)

编辑更清楚.我以Aron Rotteveel为例

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

我希望选择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>
Run Code Online (Sandbox Code Playgroud)

Aro*_*eel 21

您可以传递一组值setValue().

数组中的值应与设置multiOptions时传递的键相对应.

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

$multi->setValue(array('foo', 'bar')); 
Run Code Online (Sandbox Code Playgroud)

来自ZF手册:

要标记选中的项,需要将值数组传递给setValue().