symfonyでルートを作成し、次のような1つのルートを作成する場合の通常の解決策
/{username}
/loginや/infoのような他のルートと競合しないように、そのルートを最後のルートとしてrouting.ymlファイルに配置するだけです。他のすべてのルートが優先されるため、この競合は回避されます。しかし、コントローラーでルートをアノテーションとして定義する場合、これをどのように行うことができますか?この場合、このルートの順序を指定する方法はありますか?
symfonyでルートを作成し、次のような1つのルートを作成する場合の通常の解決策
/{username}
/loginや/infoのような他のルートと競合しないように、そのルートを最後のルートとしてrouting.ymlファイルに配置するだけです。他のすべてのルートが優先されるため、この競合は回避されます。しかし、コントローラーでルートをアノテーションとして定義する場合、これをどのように行うことができますか?この場合、このルートの順序を指定する方法はありますか?
コントローラのコンテキストでは、アクションメソッドの順序はルートの順序を定義します。アプリケーション全体のコンテキストでは、各コントローラーを明示的にインポートして、順序を制御できます。次に例を示します。
Home:
resource: "\Vendor\Controller\HomeController"
type: annotation
Security:
resource: "\Vendor\Controller\SecurityController"
type: annotation
security.log_out:
pattern: "/logout"
User:
resource: "\Vendor\Controller\UserController"
type: annotation
答えについてコメントすることはできないので、Symfony2.3でそれを機能させるためにどのように書かなければならなかったかを残しておきます。
Home:
resource: "@AcmeBundle/Controller/HomeController.php"
prefix: /home #optional
type: annotation
「\」が「/」に変更され、コントローラー名の末尾に.phpが使用されていることに注意してください。
routing.ymlの最後にあるそのルートのルールを上書きする必要があります。これを行うには、注釈によって自動的に作成されるルートと同じ名前をルートに使用します。この名前は、コンソールコマンドで見つけることができます。
php app/console debug:router
したがって、最後の行としてrouting.ymlに次を追加します。
the_name_of_the_route_as_found_with_appconsole_debug_router:
path:/{username}
defaults: { _controller: YourBundle:YourController:the_action_to_use }
同じ名前を使用すると、デフォルトで元の名前が上書きされます。重要かもしれない他のオプションを忘れないでください。{username}またはメソッドのデフォルト値またはnullのように。
コントローラの注釈からルートを完全に削除することもできます。とにかく上書きされるので、もう必要ありません:)