このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
apricot:ext:middleware [2020/05/21 14:45] y2sunlight [Apricot ミドルウェア] |
apricot:ext:middleware [2020/06/08 16:18] (現在) tanaka [Apricot ミドルウェア] |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | > 編集中 | ||
| - | |||
| - | ----- | ||
| - | |||
| ====== Apricot ミドルウェア ====== | ====== Apricot ミドルウェア ====== | ||
| --- // | --- // | ||
| 行 15: | 行 11: | ||
| * Apricot 拡張 | * Apricot 拡張 | ||
| * Apricot ミドルウェア | * Apricot ミドルウェア | ||
| + | * [[apricot: | ||
| + | * [[apricot: | ||
| * [[apricot: | * [[apricot: | ||
| - | * [[apricot: | + | * [[apricot: |
| + | * [[apricot: | ||
| * [[apricot: | * [[apricot: | ||
| * [[apricot: | * [[apricot: | ||
| - | 本章ではミドルウェアを作ります。ミドルウェアとはアクションを囲んでいる層のような存在で、ユーザからのリクエストは何層もあるミドルウェアを通って最終的にアクションにたどり着きそこでレスポンスが生成されますが、途中でリクエストが中断され、ミドルウェアがレスポンスを生成することもあります。これを図示すると以下のようになります。 | + | 本章ではミドルウェア基盤を作ります。ミドルウェアとはアクションを囲んでいる層のような存在で、ユーザからのリクエストは何層もあるミドルウェアを通って最終的にアクションにたどり着きそこでレスポンスが生成されますが、途中でリクエストが中断され、ミドルウェアがレスポンスを生成することもあります。これを図示すると以下のようになります。 |
| === ミドルウェア構造 === | === ミドルウェア構造 === | ||
| - | < | + | {{: |
| - | | + | |
| - | ┌────────────┐ | + | |
| - | [Request ] ---> | ---------> | + | |
| - | | | + | |
| - | [Response] <--- | < | + | |
| - | └────────────┘ | + | |
| - | </ | + | |
| 上図のような処理のネスト構造を '' | 上図のような処理のネスト構造を '' | ||
| - | 本章では、Apricotにミドルウェアの仕組みを作り、その例としてアクセスログを実装します。Apricotには以下のミドルウェアが実装されています。 | + | Apricotには以下のミドルウェアが実装されています。 |
| - | | + | * [[apricot: |
| - | | + | |
| * [[apricot: | * [[apricot: | ||
| + | * [[apricot: | ||
| ミドルウェアパイプラインを含めたミドルウェアの仕組みはApricotのコアの機能として実装しますが、上記のような具体的なミドルウェアの実装はアプリ側で行います。 | ミドルウェアパイプラインを含めたミドルウェアの仕組みはApricotのコアの機能として実装しますが、上記のような具体的なミドルウェアの実装はアプリ側で行います。 | ||
| 行 226: | 行 218: | ||
| {{fa> | {{fa> | ||
| - | <code php MiddlewareInvoker.php> | + | <code php MiddlewarePipeline.php> |
| <?php | <?php | ||
| namespace Core\Foundation\Middleware; | namespace Core\Foundation\Middleware; | ||
| 行 332: | 行 324: | ||
| * MiddlewarePipeline クラスの executeAction() メソッドの戻り値が Responseインスタンスだった時は、commit()メソッドを実行してクライアントにレスポンスを返します。 | * MiddlewarePipeline クラスの executeAction() メソッドの戻り値が Responseインスタンスだった時は、commit()メソッドを実行してクライアントにレスポンスを返します。 | ||
| + | \\ | ||
| - | === テスト === | + | ===== テスト実行 ===== |
| ミドルウェアの仕組みはこれで作成出来ました。まだ、具体的なミドルウエアは実装されていませんが、この時点で一度実行してみましょう。 | ミドルウェアの仕組みはこれで作成出来ました。まだ、具体的なミドルウエアは実装されていませんが、この時点で一度実行してみましょう。 | ||
| 行 345: | 行 338: | ||
| \\ | \\ | ||
| - | |||
| - | ===== アクセスログ ===== | ||
| - | |||
| - | ミドルウエアの実装例としてアクセスログを作ってみましょう。アクセスログは一番外側のミドルウェアとして機能させます。パプラインの次の処理の前後でログを取ることもできますが、ここでは、前処理としてログ出力を行います。 | ||
| - | |||
| - | ==== ==== | ||
| - | |||
| - | |||
| - | >TODO | ||
| - | |||
| - | \\ | ||
| - | |||
| - | ===== テスト実行 ===== | ||
| - | >TODO | ||
| - | |||
| - | \\ | ||