Symfony2のアノテーション@Route、@Method – ルーティング設定
1 2 3 | _welcome: path: / defaults: { _controller: TipsBlogBundle:Main:index } |
これは以下と等価。
1 2 3 4 5 6 7 8 9 | class MainController extends Controller { /** * @Route("/") */ public function indexAction() { } } |
プレースホルダー付きのルート
1 2 3 | blog_show: path: /blog/{slug} defaults: { _controller: TipsBlogBundle:Blog:show } |
これは以下と等価。
1 2 3 4 5 6 7 8 9 | class BlogController extends Controller { /** * @Route("/blog/{slug}", name="blog_show") */ public function showAction() { } } |
または
1 2 3 4 5 6 7 8 9 10 11 12 | /** * @Route("/blog") */ class BlogController extends Controller { /** * @Route("/{slug}", name="blog_show") */ public function showAction($slug) { } } |
プレースホルダーの必須/任意設定
1 2 3 | blog: path: /blog/{page} defaults: { _controller: TipsBlogBundle:Blog:index, page: 1 } |
これは以下と等価。
1 2 3 4 5 6 | /** * @Route("/blog/{page}", name="blog", defaults={"page" = 1}) */ public function indexAction($page) { } |
ルートの条件
1 2 3 4 5 | blog: path: /blog/{page} defaults: { _controller: TipsBlogBundle:Blog:index, page: 1 } requirements: page: \d+ |
これは以下と等価。
1 2 3 4 5 6 | /** * @Route("/blog/{page}", name="blog", defaults={"page" = 1}, requirements={"page" = "\d+"}) */ public function indexAction($page) { } |
別のパターンでは、
1 2 3 4 5 | homepage: path: /{culture} defaults: { _controller: TipsBlogBundle:Main:index, culture: en } requirements: culture: en|ja |
これは以下と等価。
1 2 3 4 5 6 | /** * @Route("/{culture}", name="homepage", requirements={"culture" = "en|ja"}) */ public function indexAction($culture) { } |
HTTP メソッド の制約をつける
同一のURLでもHTTPメソッドによって呼び出すメソッドやコントローラを使い分けることが可能。
1 2 3 4 5 6 7 8 9 | contact: path: /contact defaults: { _controller: AcmeDemoBundle:Main:contact } methods: [GET] contact_process: path: /contact defaults: { _controller: AcmeDemoBundle:Main:contactProcess } methods: [POST] |
これはこう書ける。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class MainController extends Controller { /** * @Route("/contact") * @Method({"GET"}) */ public function contactAction() { } /** * @Route("/contact") * @Method({"POST"}) */ public function contactProcessAction() { } } |