akrfjmt / slim-beauty
Dependency Injector for Slim3
v0.0.1
2019-03-05 08:38 UTC
Requires
- php: >=7.2.0
- slim/slim: ^3.1
Requires (Dev)
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-04-06 08:49:28 UTC
README
dependency injector for slim3
設定
dependency.php
を以下のように設定する
<?php use Akrfjmt\SlimBeauty\CustomCallableResolver; use Akrfjmt\SlimBeauty\ParameterResolver; use Akrfjmt\SlimBeauty\RequestResponseAutoParams; $c = $app->getContainer(); // parameter resolver $c[ParameterResolver::class] = function () use ($c) { return new ParameterResolver($c); }; // customize foundHandler $c['foundHandler'] = function() use ($c) { return new RequestResponseAutoParams($c->get(ParameterResolver::class), $c); }; // customize callableResolver $c['callableResolver'] = function() use ($c) { return new CustomCallableResolver($c, $c->get(ParameterResolver::class)); };
Controllerに依存コンポーネントを注入する
型または引数名でコンテナからインスタンスを取り出してControllerの引数に注入される。
コンテナにインスタンスが存在しない場合、コンポーネントをnewする。
このとき、コンストラクタの型または引数名で再帰的に依存コンポーネントが注入される。
新しく作成されたインスタンスはクラス名をキーにしてコンテナに格納される。
<?php class UserController { /** @var CustomPhpRenderer */ public $renderer; public function __construct(CustomPhpRenderer $renderer) { $this->renderer = $renderer; } public function showUser(Request $request, Response $response, array $args, UserService $userService) { $user = $userService->getUser($args['id']); return $this->renderer->render($response, 'index.phtml', ['username' => $user->getName()]); } }
routes.phpでRoutesを定義する
<?php $app->get('/@{name}', [UserController::class, 'showUser'])->setName('show_user');
[UserController::class, 'showUser']
のような形式でroutes定義を書ける。
この形式はIntelliJで定義元に飛べるという利点がある。