Forms Zend Framework 2(ZF2)和;使用多个关联的动态形式的原则2

Forms Zend Framework 2(ZF2)和;使用多个关联的动态形式的原则2,forms,collections,doctrine-orm,zend-framework2,Forms,Collections,Doctrine Orm,Zend Framework2,使用表单更新具有多个权限的角色的最佳实践是什么 我的角色表: +----+-------+ | id | name | +----+-------+ | 1 | admin | | 2 | user | +----+-------+ +----+------------+ | id | name | +----+------------+ | 1 | createUser | | 2 | updateUser | | 3 | createRole | | 4 | u

使用表单更新具有多个权限的角色的最佳实践是什么

我的角色表:

+----+-------+
| id | name  |
+----+-------+
|  1 | admin |
|  2 | user  |
+----+-------+
+----+------------+
| id | name       |
+----+------------+
|  1 | createUser |
|  2 | updateUser |
|  3 | createRole |
|  4 | updateRole |
+----+------------+
我的权限表:

+----+-------+
| id | name  |
+----+-------+
|  1 | admin |
|  2 | user  |
+----+-------+
+----+------------+
| id | name       |
+----+------------+
|  1 | createUser |
|  2 | updateUser |
|  3 | createRole |
|  4 | updateRole |
+----+------------+
我的多人关联表,角色\u权限

+---------+---------------+
| role_id | permission_id |
+---------+---------------+
|       1 |             1 |
|       1 |             2 |
|       1 |             3 |
|       1 |             4 |
|       2 |             2 |
+---------+---------------+
我的目标是使用单选按钮显示所有角色,并使用复选框动态显示关联的权限

我的问题的图像:

单击管理员角色时,权限不会随所选角色更新(当然)。这让我回到我的问题:使用ZF2+2动态显示所选角色的正确权限的最佳实践是什么

这是我生成表单的方式:

use Zend\Form\Form;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;
use Doctrine\ORM\EntityManager;

class EditRoleForm extends Form implements InputFilterAwareInterface
{

    private $editRoleInputFilter;
    private $entityManager;
    private $roleRepository;
    private $permissionRepository;

    public function __construct(EntityManager $entityManager) {
        parent::__construct('editRole');
        $this->editRoleInputFilter = new InputFilter();
        $this->entityManager = $entityManager;
        $this->roleRepository = $entityManager->getRepository('Authorization\Entity\Role');
        $this->permissionRepository = $entityManager->getRepository('Authorization\Entity\Permission');

        $this->add(array(
            'name' => 'roles',
            'type' => 'DoctrineModule\Form\Element\ObjectRadio',
            'options' => array(
                'label' => 'Roles',
                'label_attributes' => array(
                    'class' => 'col-sm-12'
                ),
                'object_manager' => $this->entityManager,
                'target_class' => 'Authorization\Entity\Role',
                'property' => 'name',
                'is_method' => true,
                'find_method' => array(
                    'name' => 'findAll',
                    'params' => array(
                        'orderBy' => array('id' => 'ASC'),
                    ),
                ),
            ),
        ));

        $this->add(array(
            'name' => 'permissions',
            'type' => 'DoctrineModule\Form\Element\ObjectMultiCheckbox',
            'options' => array(
                'label' => 'Permissions',
                'label_attributes' => array(
                    'class' => 'col-sm-12'
                ),
                'object_manager' => $this->entityManager,
                'target_class' => 'Authorization\Entity\Permission',
                'property' => 'name',
                'is_method' => true,
                'find_method' => array(
                    'name' => 'findAll',
                    'params' => array(
                        'orderBy' => array('id' => 'ASC'), // Sorting won't work
                    ),
                ),
            ),
        ));

        $this->add(array(
            'name' => 'submit',
            'type' => 'Submit',
            'attributes' => array(
                'value' => 'Update role',
                'id' => 'submitEditRoleButton',
                'class' => 'btn btn-white'
            ),
        ));

        // assign input filters and validators
        $this->editRoleInputFilter->add(array(
            'name' => 'permissions',
            'required' => true,
            'filters' => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
            ),
        ));


        $this->setInputFilter($this->editRoleInputFilter);
    }

}

如您所见,我不知道如何将复选框链接到所选单选按钮。

通常,表单表示一行(在您的情况下为一个角色)。我相信这是很难用zf2内置的表单和模型系统(在您的例子中是docrtine)解决的。最好的方法是使用javascript预加载这些数据,并动态更改它们。Ps.Doctrine2是php应用程序的性能杀手。我将rol_权限表传递给JQuery,并创建了一个函数,在单击单选按钮时检查正确的复选框。