Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


slim:4:concepts

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
slim:4:concepts [2020/10/02 11:50]
y2sunlight [ミドルウェアを追加するにはどうすればよい?]
slim:4:concepts [2020/10/07 21:19] (現在)
y2sunlight
行 1: 行 1:
-> 編集中 +====== Slim4 コンセプト ======
- +
----- +
- +
-====== Slim4 コンセプト ======+
 Version 4.5.0 Version 4.5.0
  
- --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-03-05//+ --- //[[http://www.y2sunlight.com|y2sunlight]] 2020-09-23//
  
 [[slim:top|Slim に戻る]] [[slim:top|Slim に戻る]]
行 12: 行 8:
 関連記事 関連記事
  
-  * [[slim:4:install|Slim4インストール]] +  * [[slim:4:install|Slim4 インストール]] 
-  * Slim4コンセプト +  * Slim4 コンセプト 
-  * [[slim:4:basic|Slim4の基本的な使い方]]+  * [[slim:4:request|Slim4 リクエスト]] 
 +  * [[slim:4:response|Slim4 レスポンス]] 
 +  * [[slim:4:routing|Slim4 ルーティング]] 
 +  * [[slim:4:middleware|Slim4 ミドルウェア]] 
 +  * [[slim:4:cookbook|Slim4  クックブック]]
  
-本章は以下のサイトの ''**Concepts**'' のセクションを翻訳し若干の補足を加えたのもです。+本章は以下のサイトの **Concepts** のセクションを翻訳し若干の補足を加えたのもです。
  
   * https://www.slimframework.com/docs/v4/   * https://www.slimframework.com/docs/v4/
行 416: 行 416:
  
 ===== 依存性コンテナ― ===== ===== 依存性コンテナ― =====
->TODO+ 
 +Slimは、オプションの依存性コンテナーを使用して、アプリケーションの依存関係を準備、管理、および注入します。Slimは、[[https://php-di.org/doc/frameworks/slim.html|PHP-DI]] のような [[https://www.php-fig.org/psr/psr-11/|PSR-11]] を実装するコンテナーをサポートします。 
 + 
 +PSR-11の邦訳は[[psr:psr11|こちら]]にあります。 
 + 
 +\\ 
 + 
 +==== PHP-DIでの使用例 ==== 
 + 
 +依存関係コンテナを必ず提供する必要があるとは限りません。但し、そうする場合は、''App'' を作成する前に、コンテナのインスタンスを ''AppFactory'' に与える必要があります。 
 + 
 +<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__ . '/../vendor/autoload.php'; 
 + 
 +// Create Container using PHP-DI 
 +$container = new Container(); 
 + 
 +// Set container to create App with on AppFactory 
 +AppFactory::setContainer($container); 
 +$app = AppFactory::create(); 
 +</code> 
 + 
 +そして、コンテナにサービスを追加します: 
 + 
 +<code php> 
 +$container->set('myService', function () { 
 +    $settings = [...]; 
 +    return new MyService($settings); 
 +}); 
 +</code> 
 + 
 +次のように、明示的にコンテナからからだけでなく、Slimアプリケーションルートの内からサービスをフェッチできます: 
 + 
 +<code php> 
 +/** 
 + * Example GET route 
 + * 
 + * @param  ServerRequestInterface $request  PSR-7 request 
 + * @param  ResponseInterface      $response  PSR-7 response 
 + * @param  array                  $args Route parameters 
 + * 
 + * @return ResponseInterface 
 + */ 
 +$app->get('/foo', function (Request $request, Response $response, $args) { 
 +    $myService = $this->get('myService'); 
 + 
 +    // ...do something with $myService... 
 + 
 +    return $response; 
 +}); 
 +</code> 
 + 
 +コンテナを使用する前にサービスがコンテナに存在するかどうかをテストするには、次のように ''has()'' メソッドを使用します: 
 + 
 +<code php> 
 +/** 
 + * Example GET route 
 + * 
 + * @param  ServerRequestInterface $request  PSR-7 request 
 + * @param  ResponseInterface      $response  PSR-7 response 
 + * @param  array                  $args Route parameters 
 + * 
 + * @return ResponseInterface 
 + */ 
 +$app->get('/foo', function (Request $request, Response $response, $args) { 
 +    if ($this->has('myService')) { 
 +        $myService = $this->get('myService'); 
 +    } 
 +    return $response; 
 +}); 
 +</code> 
 + 
 +\\ 
 + 
 +==== コンテナを介したアプリケーションの構成 ==== 
 + 
 +コンテナに依存性が既に定義されている ''App'' を作成する場合は、''AppFactory::createFromContainer()'' メソッドが使用できます。 
 + 
 +**例題** 
 + 
 +<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__ . '/../vendor/autoload.php'; 
 + 
 +// Create Container using PHP-DI 
 +$container = new Container(); 
 + 
 +// Add custom response factory 
 +$container->set(ResponseFactoryInterface::class, function (ContainerInterface $container) { 
 +    return new MyResponseFactory(...); 
 +}); 
 + 
 +// Configure the application via container 
 +$app = AppFactory::createFromContainer($container); 
 + 
 +// ... 
 + 
 +$app->run(); 
 +</code> 
 + 
 +サポートされているアプリの依存関係は次のとおりです: 
 + 
 +  * Psr\Http\Message\ResponseFactoryInterface 
 +  * Slim\Interfaces\CallableResolverInterface 
 +  * Slim\Interfaces\RouteCollectorInterface 
 +  * Slim\Interfaces\RouteResolverInterface 
 +  * Slim\Interfaces\MiddlewareDispatcherInterface
  
 \\ \\
  
  
slim/4/concepts.1601607026.txt.gz · 最終更新: 2020/10/02 11:50 by y2sunlight