2012-08-15 59 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