Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 向用户请求组对象_Php_Symfony_Doctrine Orm_Symfony 3.3 - Fatal编程技术网

Php 向用户请求组对象

Php 向用户请求组对象,php,symfony,doctrine-orm,symfony-3.3,Php,Symfony,Doctrine Orm,Symfony 3.3,我实际上正在学习Symfony,我正在制作自己的UserBundle,因为我必须使用在线API来管理用户。因此,我加入了用户和组对象,并将其与原则manytone关联起来。目前一切正常 Symfony在每个页面上实现用户对象并获取组的id(参见var_dump),但我希望Symfony在每个页面上获取整个组对象,而不仅仅是它的id User {#467 ▼ -id: 104 -uuid: "~" -username: "~" -lastLogin: null -website

我实际上正在学习Symfony,我正在制作自己的UserBundle,因为我必须使用在线API来管理用户。因此,我加入了用户和组对象,并将其与原则manytone关联起来。目前一切正常

Symfony在每个页面上实现用户对象并获取组的id(参见var_dump),但我希望Symfony在每个页面上获取整个组对象,而不仅仅是它的id

User {#467 ▼
  -id: 104
  -uuid: "~"
  -username: "~"
  -lastLogin: null
  -websiteActivity: null
  -clientToken: "1c667ad4-07e2-4ffa-8db1-9997eadbbc4b"
  -accessToken: "b183f850ce4d4decb07cb7485c1d0a88"
  -dataCheck: DateTime {#457 ▼
    +"date": "2017-08-27 18:23:31.000000"
    +"timezone_type": 3
    +"timezone": "Europe/Berlin"
  }
  -reputation: 0
  -group: Group {#456 ▼
    +__isInitialized__: false
    -id: 4
    -inheritId: null
    -name: null
    -chatColor: null
    -websiteName: null
    -websiteColor: null
     …2
  }
}
如果你知道如何做到这一点,那将非常有帮助


非常感谢。

请记住,控制器上的
$this->getUser()
是以下内容的别名:

$this->container->get('security.token_storage')->getToken()->getUser();
你可以看看。您可以使用它自动加入您的集团实体:

public function loadUserByUsername($username)
{
    return $this->createQueryBuilder('u')
        ->select('u, g')
        ->leftJoin('u.group', 'g')
        ->where('u.username = :username OR u.email = :email')
        ->setParameter('username', $username)
        ->setParameter('email', $username)
        ->getQuery()
        ->getOneOrNullResult();
}

这是在Symfony版本中,不确定您在问什么-看起来用户对象正在返回一个组对象,正如您所期望的那样。它没有返回整个对象,而只是id,因为Symfony只在每个页面上获取用户。组对象不应为空。请注意它是如何未初始化的-这是因为您正在对用户对象执行
var\u dump()
,而没有任何与组实体的连接。我打赌如果你做
var\u dump($user->getGroup()->getName())
你会得到你期望的值,然后组会被初始化,因为条令会用另一个查询加载该实体。实际上,您使用的是
var\u dump()
进行调试,而不了解底层。另外,使用
dump()
;它是在Symfony 2.6中引入的,而且更好。我的意思是我可以在我所有的控制器上调用它,但这将是非常重复的,因为我几乎所有的页面都需要它。这就是为什么我在寻找另一种方法。(注意:我在用dump)我需要看看你怎么称呼它。它是由ParamFetcher自动抓取的,还是直接从EntityManager抓取的?如果你表现出你是怎么做的,我可以帮你。这正是我想要的!非常感谢。是否可以通过此函数使用id而不是用户名加载用户?嗯,该函数表示
loadUserByUsername()
,通常发生在用户通过电子邮件或用户名登录时,但是没有理由不能将id传递给此函数并更新查询以搜索
->where('u.id=:id)->setParameter('id',$username)
在阅读了一行又一行的简短文档和大量尝试之后,它不起作用了,我仍然只得到了用户对象,而没有得到组。它根本没有调用这个函数。如果您正在调试,它只会在您最初登录时调用这个方法。您应该检查是否调用了这个函数;我认为它不会每一个请求都会发生,确保先发生。