LoginSignup
2
1

More than 1 year has passed since last update.

リクエストからレスポンスまでのプロセスを制御する、"HttpKernel"

Last updated at Posted at 2022-12-03

Symfony Component Advent Calendar 2022の4日目の記事です。

最初に

SymfonyはPHPのフレームワークのひとつです。しかし、公式サイトの説明文には

Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
(SymfonyはPHPコンポーネントのセットで、Webアプリケーションフレームワークで、哲学、そしてコミュニティです。それらがハーモニーを奏でながら動作しています。)

と書かれている通り、PHPコンポーネントのセットで、たくさんのコンポーネントを提供しており、それらを組み合わせてひとつのフレームワークとして動作しています。Symfonyのコンポーネントは、Symfony上だけで動作するのではなく、他のPHPフレームワークやアプリケーションでも動作している強力なものが揃っています。

今回はそれらの中から、役立ちそうなもの・お薦めしたいものを紹介していきたいと思います。

※記事内ではautoloadのインポートは省略します。

リクエストからレスポンスまでのプロセスを制御する、"HttpKernel"

HttpKernelは、リクエストからレスポンスまでのプロセスを制御するコンポーネントです。

インストール

composer require symfony/http-kernel

主なフロー

SymfonyではHttpKernelを使って次のようなフローでリクエストを処理してレスポンスを返しています。

  1. リクエストを受け取り、リクエストオブジェクトを作る
  2. kernel.requestイベント発火
  3. どのプログラムを実行するか決める
  4. kernel.controllerイベント発火
  5. プログラムを実行し、レスポンスオブジェクトを作る
    5.1. kernel.viewイベント発火
  6. kernel.responseイベント発火
  7. レスポンスオブジェクトから、レスポンスを送る
  8. 終了する
  9. kernel.terminateイベント発火
    8.1. kernel.exceptionイベント発火

要所でイベントを発火し、該当箇所で必要な処理を実行するようになっています。
たとえば、kernel.requestでは、ルーティング設定を作成する処理が実行されます。

各イベントの目的

それぞれの箇所でのイベントの目的は次のようになっています。そろぞれの箇所で処理を追加したり、データを加工する必要がある場合は、該当のイベントをサブスクライブ・リッスンすることで可能となります。

イベント 目的 クラス
kernel.request リクエストオブジェクトに追加情報をつける RequestEvent
kernel.controller コントローラー実行前の初期処理 ControllerEvent
kernel.view もし、実行結果がレスポンスオブジェクトではない場合、結果からレスポンスオブジェクトを生成する ViewEvent
kernel.response 出力前にレスポンスオブジェクトを加工する ResponseEvent
kernel.terminate レスポンス出力後に必要な重い後処理を実行する TerminateEvent
kernel.exception 例外発生後の処理とレスポンスオブジェクトの作成 ExceptionEvent

まとめ

今回はHTTPのプロセス制御を行うHttpKernelの紹介でした。このHttpKernlと、ここまでに出てきたHttpFoundation, Routing, EventDispatcherを使い、SymfonyではHTTPのリクエストからレスポンスを返す仕組みを提供しています。

2
1
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
2
1