2

次のルーティングを許可するルーティングを設定しています。

/client_a/dashboard/
/client_b/dashboard/

私はapp/config/routing.yml次のような接頭辞を使用しています:

AcmeMainBundle:
    resource: "@AcmeMainBundle/Resources/config/routing.yml"
    prefix:   /{client}  

私が直面している問題は、ログイン ルーティングでプレフィックスに問題があるように見えることです。/Resources/config/routing.ymlI am importing into the main routing file のエントリは次のとおりです。

acme_login:
    pattern: /login/
    defaults: {_controller: AcmeMainBundle:Main:login }

acme_login_check:
    pattern: /login_check
    # defaults: This is not required since the Firewall will handle this

acme_logout:
    pattern: /logout/
    # defaults: This is not required since the Firewall will handle this

ログインページは正常に表示されますが、ユーザーがログインページを送信した後、Symfony は次のエラーをスローします:

Unable to find the controller for path "/client_a/login_check". Maybe you forgot to add the matching route in your routing configuration?

Symfony2 は、内部セキュリティ ルーティングに問題があり、routing.yml でプレフィックスを使用しているように見えます。

問題を克服する方法はありますか?

注: この問題を回避する 1 つの方法は、routing.yml ファイル内のすべてのルートを変更して {client} パラメーターを含めることです。唯一の問題は、これが多数のルートを持つ非常に広範なアプリであることです。プレフィックスを使用すると、ログイン中のセキュリティ処理を除いて、驚くほど機能します。

ありがとう、

JB

4

3 に答える 3

0

かなりの調査とさまざまな側面を試した結果、現時点では、ルーティングで動的プレフィックスを使用することで適切な解決策はないようです。

問題は、ルーティングが発生する前にセキュリティバンドルがコードを実行するため、プレフィックスのルーティング属性がsecurity.ymlで使用できず、静的パスであることにあるようです。Symfonyが属性の欠落などについて不平を言うので、これ自体が問題を引き起こしています。

したがって、答えは、セキュリティの実装と組み合わせて、少なくとも私が見つけた方法では、上記は不可能であるということです。

于 2012-07-11T02:28:55.860 に答える
0

これらのルートで。を使用してコントローラーを定義する必要があると思いますdefaults: {_controller: AcmeMainBundle:Main:login }。ルーティングが行う前にファイアウォールがそれをキャッチするため、デフォルトの場合はそれらを必要としません。ただし、この場合、プレフィックスと一致させるために必要になる場合があります。

于 2012-07-10T03:52:54.807 に答える