このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
slim:4:concepts [2020/10/02 09:50] y2sunlight [ミドルウェアを追加するにはどうすればよい?] |
slim:4:concepts [2020/10/07 21:19] y2sunlight |
||
---|---|---|---|
行 1: | 行 1: | ||
- | > 編集中 | + | ====== Slim4 コンセプト ====== |
- | + | ||
- | ---- | + | |
- | + | ||
- | ====== Slim4 のコンセプト ====== | + | |
Version 4.5.0 | Version 4.5.0 | ||
- | --- // | + | --- // |
[[slim: | [[slim: | ||
行 12: | 行 8: | ||
関連記事 | 関連記事 | ||
- | * [[slim: | + | * [[slim: |
- | * Slim4のコンセプト | + | * Slim4 コンセプト |
- | * [[slim:4:basic|Slim4の基本的な使い方]] | + | * [[slim:4:request|Slim4 |
+ | * [[slim: | ||
+ | * [[slim: | ||
+ | * [[slim: | ||
+ | * [[slim: | ||
- | 本章は以下のサイトの | + | 本章は以下のサイトの **Concepts** のセクションを翻訳し若干の補足を加えたのもです。 |
* https:// | * https:// | ||
行 287: | 行 287: | ||
=== ルートミドルウェア === | === ルートミドルウェア === | ||
- | |||
- | Add middleware to a Route with the Route instance’s add() method. This example adds the Closure middleware example above: | ||
ルートミドルウェアは、そのルートが現在のHTTPリクエストメソッドとURIに一致する場合にのみインボークされます。ルートミドルウェアは、Slimアプリケーションのルーティングメソッド('' | ルートミドルウェアは、そのルートが現在のHTTPリクエストメソッドとURIに一致する場合にのみインボークされます。ルートミドルウェアは、Slimアプリケーションのルーティングメソッド('' | ||
行 319: | 行 317: | ||
</ | </ | ||
- | This would output this HTTP response body: | + | これにより、次のHTTPレスポンスボディーが出力されます: |
- | + | ||
- | これにより、次のHTTP応答本文が出力されます。 | + | |
< | < | ||
行 327: | 行 323: | ||
</ | </ | ||
- | === Group middleware === | + | === グループミドルウェア |
- | + | ||
- | In addition to the overall application, | + | |
- | + | ||
- | アプリケーション全体、およびミドルウェアを受け入れることができる標準ルートに加えて、group()マルチルート定義機能は、内部で個々のルートも許可します。 ルートグループミドルウェアは、そのルートがグループから定義されたHTTP要求メソッドおよびURIの1つと一致する場合にのみ呼び出されます。 コールバック内にミドルウェアを追加し、group()メソッドの後にadd()をチェーンすることによって設定されるグループ全体のミドルウェア。 | + | |
- | Sample Application, | + | アプリケーション全体、及びミドルウェアを受け入れることができる標準的なルート(route)に加えて、'' |
- | URLハンドラーのグループでコールバックミドルウェアを利用するサンプルアプリケーション | + | 以下は、URLハンドラーのグループでコールバックミドルウェアを利用するサンプルアプリケーションです。 |
<code php> | <code php> | ||
行 377: | 行 369: | ||
</ | </ | ||
- | When calling the /utils/date method, this would output a string similar to the below | + | '' |
- | + | ||
- | / utils / dateメソッドを呼び出すと、次のような文字列が出力されます。 | + | |
< | < | ||
行 385: | 行 375: | ||
</ | </ | ||
- | Visiting /utils/time would output a string similar to the below | + | '' |
- | + | ||
- | / utils / timeにアクセスすると、次のような文字列が出力されます。 | + | |
< | < | ||
行 393: | 行 381: | ||
</ | </ | ||
- | But visiting / (domain-root), | + | ただし、'' |
- | + | ||
- | ただし、/ | + | |
< | < | ||
行 401: | 行 387: | ||
</ | </ | ||
- | === Passing variables from middleware | + | === ミドルウェアから変数を渡す |
- | The easiest way to pass attributes from middleware is to use the request’s attributes. | + | ミドルウェアから変数を渡す最も簡単な方法は、リクエストの属性を使用することです。 |
- | + | ||
- | ミドルウェアから属性を渡す最も簡単な方法は、リクエストの属性を使用することです。 | + | |
- | + | ||
- | Setting the variable in the middleware: | + | |
ミドルウェアでの変数の設定: | ミドルウェアでの変数の設定: | ||
行 415: | 行 397: | ||
</ | </ | ||
- | Getting the variable in the route callback: | + | その変数をルートコールバックで取得する: |
- | + | ||
- | ルートコールバックで変数を取得する: | + | |
<code php> | <code php> | ||
行 436: | 行 416: | ||
===== 依存性コンテナ― ===== | ===== 依存性コンテナ― ===== | ||
- | >TODO | + | |
+ | Slimは、オプションの依存性コンテナーを使用して、アプリケーションの依存関係を準備、管理、および注入します。Slimは、[[https:// | ||
+ | |||
+ | > PSR-11の邦訳は[[psr: | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== PHP-DIでの使用例 ==== | ||
+ | |||
+ | 依存関係コンテナを必ず提供する必要があるとは限りません。但し、そうする場合は、'' | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | use DI\Container; | ||
+ | use Psr\Http\Message\ResponseInterface as Response; | ||
+ | use Psr\Http\Message\ServerRequestInterface as Request; | ||
+ | use Slim\Factory\AppFactory; | ||
+ | |||
+ | require __DIR__ . '/ | ||
+ | |||
+ | // Create Container using PHP-DI | ||
+ | $container = new Container(); | ||
+ | |||
+ | // Set container to create App with on AppFactory | ||
+ | AppFactory:: | ||
+ | $app = AppFactory:: | ||
+ | </ | ||
+ | |||
+ | そして、コンテナにサービスを追加します: | ||
+ | |||
+ | <code php> | ||
+ | $container-> | ||
+ | $settings = [...]; | ||
+ | return new MyService($settings); | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | 次のように、明示的にコンテナからからだけでなく、Slimアプリケーションルートの内からサービスをフェッチできます: | ||
+ | |||
+ | <code php> | ||
+ | /** | ||
+ | * Example GET route | ||
+ | * | ||
+ | * @param | ||
+ | * @param | ||
+ | * @param | ||
+ | * | ||
+ | * @return ResponseInterface | ||
+ | */ | ||
+ | $app-> | ||
+ | $myService = $this-> | ||
+ | |||
+ | // ...do something with $myService... | ||
+ | |||
+ | return $response; | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | コンテナを使用する前にサービスがコンテナに存在するかどうかをテストするには、次のように '' | ||
+ | |||
+ | <code php> | ||
+ | /** | ||
+ | * Example GET route | ||
+ | * | ||
+ | * @param | ||
+ | * @param | ||
+ | * @param | ||
+ | * | ||
+ | * @return ResponseInterface | ||
+ | */ | ||
+ | $app-> | ||
+ | if ($this-> | ||
+ | $myService = $this-> | ||
+ | } | ||
+ | return $response; | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== コンテナを介したアプリケーションの構成 ==== | ||
+ | |||
+ | コンテナに依存性が既に定義されている '' | ||
+ | |||
+ | **例題** | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | |||
+ | use App\Factory\MyResponseFactory; | ||
+ | use DI\Container; | ||
+ | use Psr\Container\ContainerInterface; | ||
+ | use Psr\Http\Message\ResponseFactoryInterface; | ||
+ | use Slim\Factory\AppFactory; | ||
+ | |||
+ | require_once __DIR__ . '/ | ||
+ | |||
+ | // Create Container using PHP-DI | ||
+ | $container = new Container(); | ||
+ | |||
+ | // Add custom response factory | ||
+ | $container-> | ||
+ | return new MyResponseFactory(...); | ||
+ | }); | ||
+ | |||
+ | // Configure the application via container | ||
+ | $app = AppFactory:: | ||
+ | |||
+ | // ... | ||
+ | |||
+ | $app-> | ||
+ | </ | ||
+ | |||
+ | サポートされているアプリの依存関係は次のとおりです: | ||
+ | |||
+ | * Psr\Http\Message\ResponseFactoryInterface | ||
+ | * Slim\Interfaces\CallableResolverInterface | ||
+ | * Slim\Interfaces\RouteCollectorInterface | ||
+ | * Slim\Interfaces\RouteResolverInterface | ||
+ | * Slim\Interfaces\MiddlewareDispatcherInterface | ||
\\ | \\ | ||