2013-03-26 3 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%/fail_path, но он всегда возвращает en (мой локаль по умолчанию). Он не понимает названия маршрутов. Если я использую имя маршрута, например. login_fail не работает (перенаправление как относительный путь).

Это мой маршрут.

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

Любые идеи по его устранению?

+0

У меня эта проблема также в symfony 3.0, какие-то решения? –

+0

Я был давно. Но, как я помню, первый ответ ниже решил мою проблему. –

ответ

1

Конфигурация загружена до того DIC компилируется прежде чем запрос фактически обработан, так как он доступен из Request, вы не можете получить доступ к локаль в конфигурации.

Если вы не возражаете один дополнительный переадресацией, вы можете иметь действие, которое будет перенаправлять пользователя после неудачной аутентификации исправить маршрут:

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() 
     ]); 
    } 
} 

путь неудачи Установить, чтобы соответствовать его маршрут:

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

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

Спасибо человеку. Я использовал все маршруты с префиксом: {locale} /. Вот почему я получал locale = login_fail. Ваша идея хорошая и простая. Спасибо. Но странно, что я не могу использовать имена маршрутов в security.yml. Может быть, это из-за моей версии 2.0.0)) –

Смежные вопросы