akrfjmt / slim-beauty
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-09-06 09:48:07 UTC
README
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的参数中。
如果容器中不存在实例,将创建组件。
此时,将通过构造函数的类型或参数名递归地注入依赖组件。
新创建的实例将以其类名为键存储在容器中。
<?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中跳转到定义源。