0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Symfony @Routeについて

Posted at

はじめに

PHPフレームワークであるSymfonyを用いて開発を行っているとき、@Routeというアノテーションが記載されていたため、これは何だと思い調べたものをまとめておきます

php
    /**
     * @Route(
     *     "/user/buy/item",
     *     name="hogepage",
     *     methods={"POST"}
     * )
     *
     * @param Request $request
     */
    public function hogehoge(Request $request)
    {

@Route(ルートアノテーション)とは

@Routeとは
・「このメソッドに対して、どの URL に、どの HTTP メソッドでアクセスできるか」
・「このルートの名前は何か(他の場所から参照するためのID)」
を指すものになります。
上記の例では

  • URL: /user/buy/item
  • ルート名: hoge_page
  • HTTPメソッド: POST
    でアクセスされたときに、このメソッドが呼ばれます。

もし GET でアクセスが来た場合は「このルートは対象外」とみなされ、404 や 405 になります。
methods={"GET", "POST"}と記述すると両方対応できます。

ルート名は「内部用の名前」のことです。
URLを生成したい時、パスを書き込まなくてもルート名から生成を行うことが出来ます。

// URL生成
$url = $this->generateUrl('hoge_page');

// Twigテンプレート
<a href="{{ path('hoge_page') }}">商品ページへ</a>

内部(コントローラやテンプレート)からならルート名を利用することはできますが、
外部(ブラウザ・APIクライアント)からはルート名は利用することが出来ないので注意しましょう。

@Routeが呼び出される流れ

正確には @Route 自体が『呼び出される』わけではなく、@Route で設定されたルート情報に基づいて、対応するコントローラメソッドが呼ばれるイメージです。

それでは流れを紹介します。

コントローラー → @Route

  • やること:

    • redirectToRoute('ルート名')
    • generateUrl('ルート名')
  • 動き:

    • ルート名 → URL を生成
    • ブラウザをその URL へリダイレクト
    • 結果として、そのルートのメソッドが実行される

テンプレート(Twig) → @Route

  • やること:

    • {{ path('ルート名') }}
    • {{ url('ルート名') }}
  • 動き:

    • ルート名 → URL を生成
    • HTML の hrefaction に URL が埋め込まれる
    • ユーザー操作やフォーム送信でその URL が叩かれる
    • 結果として、そのルートのメソッドが実行される

外部(ブラウザ / JS / 他サービス) → @Route

  • やること:

    • 素の URL(例: /something/...)を叩く
  • 動き:

    • Symfony がルーティングテーブルから、URL + HTTP メソッドにマッチするルートを探す
    • 対応するメソッド(コントローラーメソッド)を実行する

最後に

フレームワークでは大体、
1.ルーティング設定(@Route アノテーションや、routes.yaml など)をあらかじめ読み込む
2.リクエストが来たら、URL と HTTPメソッドを見て、どのルートにマッチするかを探す
3.マッチしたルートに紐づいているコントローラメソッドを呼び出す
4.そのメソッドの戻り値(Response)をクライアントに返す
という流れで動きます。

@Routeを利用することによって、どのメソッドがどの URL に対応しているかが、その場でわかりやすくなります。また、ルート名から URL を生成できるので、URLの変更が楽になります。

ぜひSymfonyを利用する際は@Route アノテーションを利用して、ルーティング設定をしてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?