2012-08-15 60 views
0

我有这样的代码在控制器没能获得当前登录用户的Symfony2控制器

public function newAction() 
    { 
$em = $this->getDoctrine()->getEntityManager(); 
$user = $this->container->get('security.context')->getToken()->getUser(); 

我收到此错误

Fatal error: Call to a member function getUser() on a non-object in /home/xxxxx/Acme/UserBundle/Controller/UserController.php on line 86

+0

请附上你'你的行动 – 2012-08-15 04:56:16

回答

5

这意味着你的安全上下文没有用令牌填充。发生这种情况时,您的行动路线不在防火墙后面。

你应该security.yml

+0

感谢我的路线不在防火墙后面 – user825904 2012-08-15 06:18:45

+0

我正在使用SF2 doc中给出的AuthenticationHandler。我使用var_dump()来检查数据是否在那里......'public function onAuthenticationSuccess(Request $ request,TokenInterface $ token) {user = $ this-> container-> get('security.context') - >为gettoken() - >的getUser(); var_dump($ user); exit; }'。我在这里获得完整的用户对象。但是,在身份验证后,在控制器中,我得到*致命错误:调用成员函数getUser()在非对象的*错误中。 – webblover 2014-10-11 14:21:15

+0

的确如此。改变了我的routing.yml,它立即工作。谢谢 – voghDev 2015-12-11 06:53:34

1
  1. 请确保您登录使用的Symfony调试栏。如果你可以看到那里记录那么它应该工作正常

  2. 也看看如果这条路径是在防火墙后面。如果它没有登录,但你不会得到该用户

+0

的security.yml'的路线和我的应用程序设置,第一点是满意的。就第二点而言,“防火墙后面”是什么意思?我不在security.yml中编写任何模式来限制路由。那么,为什么我无法从控制器访问** $ this-> container-> get('security.context') - > getToken() - > getUser(); **?我正在使用Handler来验证SF2文档中给出的用户。 – webblover 2014-10-11 14:00:05

0

检查你的防火墙模式,我有同样的问题。我的错误是如下:

security.yml

access_control: 
    - { path: ^/admin/*, roles: ROLE_ADMIN } 

我不得不改变我在那里有从这个错误的控制器:

的routing.yml(BAD)

admin_bets: 
    resource: "@adminBundle/Resources/config/routing/bets.yml" 
    prefix: /bets 

对此:

的routing.yml(GOOD)

admin_bets: 
    resource: "@adminBundle/Resources/config/routing/bets.yml" 
    prefix: /admin/bets