jenssegers / lean
将支持自动装配的league/container作为Slim 3的核心容器使用
Requires
- php: >=7.0
- league/container: ^2.0|^3.0
- slim/slim: ^3.0
Requires (Dev)
- phpunit/phpunit: ^6.0|^7.0
- satooshi/php-coveralls: ^2.0
README
Lean 允许您将带有自动装配支持的 PHP League's Container 包作为核心容器用于 Slim 3。
安装
通过 Composer
$ composer require jenssegers/lean
用法
开始使用 Lean 的最简单方法是创建一个 Jenssegers\Lean\App
实例
require 'vendor/autoload.php'; $app = new \Jenssegers\Lean\App(); $app->get('/hello/{name}', function (Request $request, Response $response, string $name) { return $response->write('Hello, ' . $name); }); $app->run();
在幕后,通过将所有必需的 Slim 组件添加到 League 的容器中,启动一个 Slim 应用程序。
服务提供者
服务提供者可以组织您的容器定义,并在大型应用程序中提高性能,因为服务提供者中注册的定义将在检索服务时惰性注册。
要构建服务提供者,只需扩展基本服务提供者并定义您想注册的内容即可。
use League\Container\ServiceProvider\AbstractServiceProvider; class SomeServiceProvider extends AbstractServiceProvider { /** * The provided array is a way to let the container * know that a service is provided by this service * provider. Every service that is registered via * this service provider must have an alias added * to this array or it will be ignored. */ protected $provides = [ SomeInterface::class, ]; /** * This is where the magic happens, within the method you can * access the container and register or retrieve anything * that you need to, but remember, every alias registered * within this method must be declared in the `$provides` array. */ public function register() { $this->getContainer() ->add(SomeInterface::class, SomeImplementation::class); } }
要将此服务提供者注册到容器中,只需将您的提供者实例或完全限定类名传递给 League\Container\Container::addServiceProvider 方法。
$app = new \Jenssegers\Lean\App(); $app->getContainer()->addServiceProvider(\Acme\ServiceProvider\SomeServiceProvider::class);
有关服务提供者的更多信息,请参阅 此处。
设置
您可以通过容器上的 settings
键访问 Slim 的内部配置
$app = new \Jenssegers\Lean\App(); $app->getContainer()->get('settings')['displayErrorDetails'] = true;
或者,注册了一个别名,允许更流畅地处理设置
$app = new \Jenssegers\Lean\App(); $app->getContainer()->get(\Slim\Settings::class)->set('displayErrorDetails', true);
有关可用配置选项的更多信息,请参阅 此处。
路由参数
默认情况下,Lean 将使用方法注入将参数传递给您的路由。这允许您在方法级别对依赖项进行类型提示(类似于 Laravel 框架)。
路由参数将作为单个参数传递给您的函数
$app->get('/books/{id}', function (Request $request, Response $response, string $id) { ... });
它们也可以通过 getAttribute
方法访问。
$app->get('/books/{id}', function (Request $request, Response $response) { $id = $request->getAttribute('id'); .... });
如果您想禁用此行为并使用 Slim 的默认路由参数方式,可以将 methodInjection
设置为 false
来禁用此功能
$app->getContainer()->get(\Slim\Settings::class)->set('methodInjection', false);
有关路由的更多信息,请参阅 此处。
错误处理器
默认情况下,Lean 使用 Slim 的错误处理器。有几种不同的方式可以实现 Slim 的错误处理器,更多关于这些内容请参阅 此处。
通常您会创建一个类似这样的自定义错误处理器类
class CustomErrorHandler { public function __invoke(ServerRequestInterface $request, Response $response, Throwable $exception) { return $response->withJson([ 'error' => 'Something went wrong', ], 500); } }
然后通过将其添加到容器中,覆盖默认处理器
$app = new Jenssegers\Lean\App(); $app->getContainer()->share('errorHandler', function () { return new CustomErrorHandler(); });
理想情况下,您应该将此代码放在服务提供者中。有关服务提供者的更多信息,请参阅上面。
测试
$ php ./vendor/bin/phpunit
许可证
MIT 许可证 (MIT)。