SlimPHPの公式サイト Dependency Container - Slim Framework の意訳です。
Slimは、アプリケーションの依存関係の準備、管理、組み込みのために、Dependencyコンテナを利用します。Slimは、コンテナ機能を支援するためにContainer-Interopインターフェースを実装しています。Slimに組み込まれているコンテナ(Pimpleをベースにしたもの)や、AcclimateやPHP-DIのようなサードバーティ製のコンテナを利用することができます。
コンテナの使い方
Dependencyコンテナを利用する必要はありません。ですが、利用しない場合でもコンテナのインスタンスはSlimアプリケーションのコンストラクタに渡す必要があります。
$container = new \Slim\Container; $app = new \Slim\App($container);
明示的または暗黙的に、組み込まれたコンテナからサービスを引き出して利用することができます。以下、Slimアプリケーションのルートから明示的にコンテナのインスタンスを取得する例です。
/** * Example GET route * * @param \Psr\Http\Message\ServerRequestInterface $req PSR7 request * @param \Psr\Http\Message\ResponseInterface $res PSR7 response * @param array $args Route parameters * * @return \Psr\Http\Message\ResponseInterface */ $app->get('/foo', function ($req, $res, $args) { $myService = $this->get('myService'); return $res; });
以下のように、暗黙的にコンテナからサービスを取得することもできます。
/** * Example GET route * * @param \Psr\Http\Message\ServerRequestInterface $req PSR7 request * @param \Psr\Http\Message\ResponseInterface $res PSR7 response * @param array $args Route parameters * * @return \Psr\Http\Message\ResponseInterface */ $app->get('/foo', function ($req, $res, $args) { $myService = $this->myService; return $res; });
Slimは、アプリケーションのインスタンスが持っていないプロパティを、アプリケーションのコンテナから得るために __get() や __isset() というマジックメソッドを利用します。
実装する必要があるサービス
コンテナは、以下のサービスを実装する必要があります。Slimの組み込みコンテナにはすでに実装されています。サードパーティー製のコンテナを利用する場合は、以下を定義する必要があります。
settings
アプリケーション設定の連想配列に、以下のキーを含めます。
- httpVersion
- outputBuffering
- responseChunkSize
- determineRouteBeforeAppMiddleware
environment
\Slim\Interfaces\Http\EnvironmentInterface のインスタンスです。
request
\Psr\Http\Message\ServerRequestInterface のインスタンスです。
response
\Psr\Http\Message\ResponseInterface のインスタンスです。
router
\Slim\Interfaces\RouterInterface のインスタンスです。
foundHandler
\Slim\Interfaces\InvocationStrategyInterface のインスタンスです。
errorHandler
アプリケーションのエラー時に呼び出されます。\Psr\Http\Message\ResponseInterface をreturnする必要があり、以下の3つの引数を受け取るようにします。
- \Psr\Http\Message\ServerRequestInterface
- \Psr\Http\Message\ResponseInterface
- \Exception
notFoundHandler
アクセスのあったHTTPリクエストのURIが、アプリケーションで設定したどのルートとも一致しなかった場合に呼ばれます。\Psr\Http\Message\ResponseInterface のインスタンスを return する必要があり、以下の2つの引数を受け取ります。
- \Psr\Http\Message\ServerRequestInterface
- \Psr\Http\Message\ResponseInterface