16

symfonyでルートを作成し、次のような1つのルートを作成する場合の通常の解決策

/{username}

/loginや/infoのような他のルートと競合しないように、そのルートを最後のルートとしてrouting.ymlファイルに配置するだけです。他のすべてのルートが優先されるため、この競合は回避されます。しかし、コントローラーでルートをアノテーションとして定義する場合、これをどのように行うことができますか?この場合、このルートの順序を指定する方法はありますか?

4

3 に答える 3

25

コントローラのコンテキストでは、アクションメソッドの順序はルートの順序を定義します。アプリケーション全体のコンテキストでは、各コントローラーを明示的にインポートして、順序を制御できます。次に例を示します。

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
于 2012-08-01T12:30:33.660 に答える
1

答えについてコメントすることはできないので、Symfony2.3でそれを機能させるためにどのように書かなければならなかったかを残しておきます。

Home:
    resource: "@AcmeBundle/Controller/HomeController.php"
    prefix: /home #optional
    type: annotation

「\」が「/」に変更され、コントローラー名の末尾に.phpが使用されていることに注意してください。

于 2014-10-01T07:00:50.983 に答える
1

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のように。

コントローラの注釈からルートを完全に削除することもできます。とにかく上書きされるので、もう必要ありません:)

于 2017-07-11T16:42:24.847 に答える