2013-03-26 137 views
3

我正在使用symfony2.0.0。我沒有機會更新symfony。 這是我security.ymlsymfony2.0.0獲取security.yml中的語言環境

 
firewalls: 
     main: 
      logout: true 
      pattern: .* 
      http_basic: true 
      anonymous: true 
      form_login: 
      provider: fos_userbundle 
      login_path: /login 
      use_forward: true 
      check_path: /login_check 
      failure_path: /login_fail 
      remember_me: 
      key:  "lkjxd%34(lksdf;SDfsf" 
      lifetime: 31536000 
      path: /
      domain: ~ 

如何使用區域設置爲我failure_path。試圖使用/%locaale%/ failure_path,但它總是返回en(我的默認語言環境)。它不瞭解路由名稱。如果我使用路線的名稱login_fail它不起作用(重定向像一個相對路徑)。

這是我的路線。

 
login_fail: 
    pattern: /{_locale}/login_fail 
    defaults: { _controller: ContactbeeProfileBundle:Profile:dashboard, _locale: en } 

任何想法解決它?

+0

我在symfony 3.0中也有這個問題,任何解決方案? – 2016-01-11 01:43:28

+0

我很久以前。但是,正如我記得下面的第一個答案已經解決了我的問題。 – 2016-01-12 11:20:09

回答

1

在請求實際處理之前編譯DIC之前加載配置,因爲它可從Request,訪問,您無法訪問配置中的區域設置。

如果你不介意一個額外的重定向,你可以有一個動作,將驗證失敗後用戶重定向到正確的路由:

# routing.yml 
login_fail: 
    pattern: /login_fail 
     defaults: { _controller: AcmeDemoBundle:Security:failed } 

login_fail_localized: 
    pattern: /{locale}/login_fail 
     defaults: { _controller: ContactbeeProfileBundle:Profile:dashboard } 

namespace Acme\DemoBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class SecurityController extends Controller { 
    public function failedAction() { 
     return $this->redirect($this->generateUrl('login_fail_localized'), [ 
      'locale' => $this->getRequest()->getLocale() 
     ]); 
    } 
} 

與之匹配的路線設置故障路徑

+1

謝謝你。我用了前綴爲{locale} /的所有路由。這就是我得到locale = login_fail的原因。你的想法很好,很簡單。謝謝。但奇怪的是,我不能在security.yml中使用路由名稱。也許這是因爲我的2.0.0版本))) – 2013-03-27 07:50:05