3

symfony2.0.0を使用しています。symfonyを更新する機会がありません。これは私のsecurity.ymlです

ファイアウォール:
        主要:
          ログアウト:true
          パターン: 。*
          http_basic:true
          匿名:true
          form_login:
            プロバイダー:fos_userbundle
            login_path:/ login
            use_forward:true
            check_path:/ login_check
            failure_path:/ login_fail
          私を覚えてますか:
            キー: "lkjxd%34(lksdf; SDfsf"
            寿命:31536000
            道: /
            ドメイン:〜

failure_pathにロケールを使用するにはどうすればよいですか。/%locaale%/ failure_pathを使用しようとしましたが、常にen(私のデフォルトロケール)を返します。ルート名を理解していません。login_failなどのルートの名前を使用すると、機能しません(相対パスのようにリダイレクトします)。

これが私のルートです。

ログイン失敗:
  パターン:/ {_ locale} / login_fail
  デフォルト:{_controller:ContactbeeProfileBundle:Profile:dashboard、_locale:en}

それを修正するためのアイデアはありますか?

4

1 に答える 1

1

構成は、要求が実際に処理される前にDICがコンパイルされる前にロードされます。これはRequest、からアクセスできるため、構成内のロケールにアクセスすることはできません

追加のリダイレクトを1つ気にしない場合は、認証に失敗した後にユーザーをリダイレクトしてルートを修正するアクションを実行できます。

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 }
于 2013-03-26T23:32:10.770 に答える