代码之家  ›  专栏  ›  技术社区  ›  Paolito75

Symfony-树枝模板中的服务

  •  0
  • Paolito75  · 技术社区  · 6 年前

    我用Symfony 3.4创建了自己的网站,并开发了自己的用户管理包。更具体地说,包包含两个实体:用户和组。下面是它与一些getter/setter之间的许多关系:

    <?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;
    

    很简单。一切正常,例如:

    • 用户“peter”获得组3

    我不能做的是显示一个特定的文本 发送给特定组的所有用户。

      1. 在我的包中创建新服务,然后检索当前用户。完成。
      1. 获取当前用户组的列表。我被困在这里了。
      1. 在twig中注入服务,然后使用{%if}{%endif}语句。完成(测试)。

    以下是我的定制服务:

    <?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).
        }
    
    }
    

    我设法得到了当前用户,但我不知道如何得到他所属的组。 知道吗?有没有更好的方法来实现这一切?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Chip Dean    6 年前

    您可以直接在twig模板中访问登录的用户数据,而无需在控制器中请求任何内容。用户可以这样访问: app.user .

    hasGroup 给你的 User

    如果你这样做了,你就可以这样做:

    {% if app.user.hasGroup('groupName') %} 
         //do something 
    {% endif %}
    
        2
  •  1
  •   Jovan Perovic    6 年前

    不确定是否可以获取哪些组拥有该用户。我确定的是你可以用 {% if is_granted('ROLE_WHATEVER') %} 在树枝里面。

    所以一个组是一个角色的集合。。。也许你可以查一下斯特拉格的角色。。。希望对你有用。对不起,如果没用的话。

        3
  •  -1
  •   V-Light    6 年前

    如果用户可能有多个组,而同一个组可能属于多个用户,则这是典型的多人关系。

    1. 我懂了 曼尼托 . 如果不是这个注释的错别字 你会得到 group_id 在你的 users 以及 user_id 你的 groups 不是多对多模型的表。看一看 在这里 http://ormcheatsheet.com/#manytomany https://gist.github.com/Ocramius/3121916
    2. 检查什么 $user->getGroup() Group )而不是一个 ArrayCollection ->该关系无法按您描述的方式工作,您无法获得已分配组的列表。
    3. 总是检查你的关系 bin/console doctrine:schema:validate

    P、 如果你跑 bin/console doctrine:generate:entity YourBundleName:Group 你会得到一个错误

    “组”是一个保留字

    所以我假设您已经手动创建了所有实体。仔细检查是否有错别字或错误的复制/粘贴