Ale*_*leš 19 forms many-to-many symfony
我在symfony中创建了2个实体:多对多关系中的用户和角色.这意味着每个用户都可以拥有更多角色,并且可以为许多用户设置角色.
用户类:
/**
* @ORM\Entity
* @ORM\Table(name="JEP_User")
* @ORM\Entity(repositoryClass="Chrchel\JepBundle\Repository\UserRepository")
*/
class User implements AdvancedUserInterface {
/**
* @ORM\Id()
* @ORM\Column(name="id",type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="username",type="string",length=100,unique=true)
*/
private $username;
/**
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
*
*/
protected $roles;
//....
}
Run Code Online (Sandbox Code Playgroud)
角色类:
/**
* @ORM\Table(name="JEP_Role")
* @ORM\Entity()
*/
class Role implements RoleInterface {
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/** @ORM\Column(name="name", type="string", length=30) */
protected $name;
/** @ORM\Column(name="role", type="string", length=20, unique=true) */
protected $role;
/** @ORM\ManyToMany(targetEntity="User", mappedBy="roles") */
protected $users;
//...
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何在Symfony2中组合查询构建器以列出存在的所有角色,并将其添加到UserForm的末尾,可以选择(作为复选框)授予用户的角色.我尝试在UserType中使用这样的集合
->add('roles', 'collection',array('label' => 'Role', 'required' => false,'type'=> new RoleType()))
Run Code Online (Sandbox Code Playgroud)
我从symfony得到的最好的是带有文本框的行,这些文本框具有选定的角色名称.但这不是我需要的.
gre*_*emo 31
我使用了实体类型而不是集合.我的东西集合主要用于实际创建一个Role对象并将其分配给User.
如果您只想列出所有现有角色,并且能够选择并将其分配给用户,那么:
->add('roles', 'entity', array(
'class' => 'MyBundle:Role',
'property' => 'name',
'multiple' => true
));
Run Code Online (Sandbox Code Playgroud)
编辑:这将窗口小部件呈现为多个<select>,引用实体类型呈现为复选框列表.
如果有人使用Symfony3:
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
->add('roles', EntityType::class, array( // <-- EntityType::class is unique to Symfony3
'class' => 'AppBundle:Role',
'choice_label' => 'name', // <-- choice_label is unique to Symfony3
'multiple' => true
))
Run Code Online (Sandbox Code Playgroud)
@ user1041880:如果您使用symfony安全功能(需要将euser的角色作为数组),您可以这样做:
->add('rolesAsCollection', 'entity', array(
'class' => 'MyBundle:Role',
'property' => 'name',
'multiple' => true
));
Run Code Online (Sandbox Code Playgroud)
在您的用户类中:
public function getRolesAsCollection()
{
return $this->roles;
}
Run Code Online (Sandbox Code Playgroud)