Zend Framework嵌套复选框

And*_*rew 5 zend-framework zend-form nested-checkboxes

我想创建一个Zend_Form嵌套的复选框.我确信这是可能的,但我不记得该怎么做了.这就是它的样子:

[x] Top level checkbox 1
    [ ] Sub level 1
    [x] Sub level 2

[ ] Top level 2
    [ ] Sub level 1
    [ ] Sub level 2
Run Code Online (Sandbox Code Playgroud)

我将如何实现这一结果?

sat*_*n77 0

您可以使用 ViewScript Decorator 来执行此操作

http://framework.zend.com/manual/en/zend.form.standardDecorators.html#zend.form.standardDecorators.viewScript

一个例子

class MyForm extends Zend_Form
{

    public function init()
    {
        $this->addElement('checkbox', 'elementName', array(
            'multiOptions' => array(
                'level1' => array(
                    'Level 1 Option 1',
                    'Level 1 Option 2',
                ),
                'level2' => array(
                    'Level 2 Option 1',
                    'Level 2 Option 2',
                ),
            ),
            'label' => 'Element Label',
            'decorators' => array(
                array('ViewScript', array(
                        'viewScript' => '_element.phtml',
                        'class' => 'form element')
                    )
            )
        ));
    }
}
Run Code Online (Sandbox Code Playgroud)

在视图脚本目录中创建 _element.phtml。

<div class="<?php echo $this->class ?>">
    <?php echo $this->formLabel($this->element->getName(),
                         $this->element->getLabel()) ?>

    <?php $options = $this->element->getAttribs(); ?>

    <?php if(isset($options['multiOptions']) && is_array($options['multiOptions'])): ?>
        <ul>
        <?php foreach($options['multiOptions'] as $level => $levelOptions): ?>
            <li>
                <span><?php echo $level; ?></span>
                <?php if(is_array($levelOptions)): ?>
                <ul>
                    <?php foreach($levelOptions as $key => $value): ?>
                    <li>
                        <?php echo $this->{$this->element->helper}(
                            $this->element->getName() . '[' . $key . ']',
                            $this->element->getValue(),
                            $options['options']
                         ) ?><label><?php echo $value; ?></label>
                    </li>
                    <?php endforeach; ?>
                </ul>
                <?php endif; ?>
            </li>
        <?php endforeach; ?>
        </ul>
    <?php endif; ?>

    <?php echo $this->formErrors($this->element->getMessages()) ?>

    <div class="hint"><?php echo $this->element->getDescription() ?></div>
</div>
Run Code Online (Sandbox Code Playgroud)