我使用Symfony 3.4创建了我的网站,并开发了自己的用户管理包。更具体地说,捆绑包包含2个实体:用户和组。下面是它与一些获取器/设置器之间的ManyToMany关系:
<?php
class User
{
/**
* @ORM\ManyToOne(targetEntity="Group")
*/
private $groups;
public function addGroup(Group $group)
{
//
}
public function removeGroup(Group $group)
{
//
}
public function getGroup()
{
//
}
和
<?php
class Group
{
/**
* @ORM\ManyToOne(targetEntity="User")
*/
private $users;
非常简单。一切正常,例如:
我不能做的是在树枝模板中向特定组的所有用户显示特定文本。 我尝试过的:
在我的自定义服务下面:
<?php
namespace CoreBundle\Security;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class AuthorizationChecker
{
private $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
/**
*
* Get current user's groups
* @return array
*
*/
public function getUserGroups()
{
$user = $this->tokenStorage->getToken()->getUser();
// I can var_dump($user) in Twig
// But don't know how to get his group(s).
}
}
我设法获得了当前用户,但是我不知道如何获得他所属的组。 任何想法 ?有没有更好的方法来实现所有这些目的?
答案 0 :(得分:2)
您可以直接在树枝模板中访问已登录的用户数据,而无需在控制器中请求任何内容。可以这样访问用户:app.user
。
我会向您的hasGroup
对象添加方法User
,然后您可以在树枝模板中调用该方法以测试用户是否属于组。
如果您这样做了,那么您就可以这样做:
{% if app.user.hasGroup('groupName') %}
//do something
{% endif %}
答案 1 :(得分:1)
不确定是否可以获取具有该用户的组。我肯定知道的是,您可以在树枝内部使用{% if is_granted('ROLE_WHATEVER') %}
。
因此,一个小组是角色的集合...也许您可以检查角色的直率...希望对您有用。抱歉,如果没有帮助。
答案 2 :(得分:-1)
如果用户可能有多个组,而同一组可能属于多个用户-这是经典的ManyToMany Relation。
group_id
表{strong> AND users
中获得user_id
您的groups
表不是多对多模型。看一看
在此http://ormcheatsheet.com/#manytomany,尤其是在此=> https://gist.github.com/Ocramius/3121916 $user->getGroup()
返回什么。如果它返回一个组(Group
的单个对象)而不是ArrayCollection
->该关系将无法按照您所描述的那样工作,并且您将无法获得已分配组的列表。bin/console doctrine:schema:validate
的关系 P.S。如果您运行bin/console doctrine:generate:entity YourBundleName:Group
,将会收到错误消息
“组”是保留字
因此,我假设您已手动创建了所有实体。仔细检查是否有错字或错误的复制/粘贴