Zend框架2中的Doctrine Multi复选框

时间:2014-11-20 14:46:02

标签: php forms doctrine-orm zend-framework2

我想在zend framework 2表单中创建分类多复选框。下面是我想要实现的图片。

enter image description here

我已经在 DoctrineModule \ Form \ Element \ ObjectMultiCheckbox 的帮助下显示了所有复选框。我如何将它们分类到相关部分。

以下是我的实体。

/**
 * @ORM\Entity
 * @ORM\Table(name="permissions")
 */
class Permission implements PermissionInterface
{

/**
 * @var int|null
 *
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @var string|null
 *
 * @ORM\Column(type="string", length=128, unique=true)
 */
protected $name;

/**
 * @var string|null
 *
 * @ORM\Column(type="string", length=128, unique=false)
 */
protected $label;

/**
 * @ORM\ManyToOne(targetEntity="ApplicationFeatures", inversedBy="permissions")
 */
protected $applicationFeature;
}

以上实体提供复选框。对于类别i,创建另一个实体并将外键添加到上面的实体以检查哪个权限属于类别。我的另一个实体是

/**
* @ORM\Entity
 * @ORM\Table(name="application_features")
 */
class ApplicationFeatures
{
/**
 * @var int|null
 *
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @var string|null
 *
 * @ORM\Column(type="string", length=30, unique=true)
 */
protected $name;

/**
 * @var Doctrine\Common\Collections\Collection
 * 
 * @ORM\OneToMany(targetEntity="Permission", mappedBy="applicationFeature")
 */
protected $permissions;
}

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题并以这种方式解决了这个问题: 您有类Permission和类ApplicationFeatures。 仅使用1个类Permission和其他列 - Parent。 当您打印MultiCheckBoxes时,您的横幅管理,页面管理,菜单管理将成为复选框。

在Controller编辑表单中这样:

{
    $form->bind($Permission); 
    $list = SELECT ARRAY FROM DATABASE IN A FORM $result['id'] = $result;
    $element = $form->get('Permission');
    $myValueOptions = $element->getValueOptions();

    $newValueOptions = array();
    foreach($myValueOptions AS $key=>$myValueOption){
        $newValueOptions[$key] = $myValueOption;
        $newValueOptions[$key]['label_attributes'] = 
            array('style' => 'display:block; ');
        if($list[$myValueOption['value']]['isParent']==1){
            $newValueOptions[$key]['label_attributes']['style'] .=
                  'font-weight: bold;';
            $newValueOptions[$key]['attributes'] = array('class'=>'isParent');
        }
    }
    $element->setValueOptions(newValueOptions);
}

现在删除父标签上的复选框。在.phtml添加脚本的末尾:

{

<script>
    $(function() {
        $( ".isParent" ).remove();
    });
</script>
}