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,并创建了一个函数,在单击单选按钮时检查正确的复选框。