jangolle / slim-symfony-container
简单地将SlimPHP容器集成到Symfony依赖注入容器中
Requires
- php: ^7.1
- slim/slim: ^3.0
- symfony/config: ^4.0
- symfony/dependency-injection: ^4.0
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-09-23 04:35:55 UTC
README
Slim与Symfony DI容器集成
轻松解决Symfony ContainerBuilder并在其中设置所有默认Slim应用程序依赖项(如有必要)。Loader解析symfony配置参数,并使用参数设置Slim默认设置到symfony ParameterBag。
安装
该库可在Packagist上获取。
通过composer安装是推荐的安装方式。
只需将此行添加到您的composer.json文件中的required部分
"jangolle/slim-symfony-container": "~1.0"
或者只需在控制台中运行
cd /path/to/your/project
composer require jangolle/slim-symfony-container
默认用法
您可以直接创建ContainerBuilder并使用它从头开始设置,如下所示使用SlimDefaultServicesInjection
<?php declare(strict_types=1); use JanGolle\SlimSymfonyContainer\ContainerManager; use JanGolle\SlimSymfonyContainer\Loader\SlimDefaultServicesInjection; use Symfony\Component\DependencyInjection\ContainerBuilder; $containerManager = new ContainerManager(); $container = new ContainerBuilder(); $container = $containerManager->resolveContainer($container, new SlimDefaultServicesInjection()); $app = new \Slim\App($container); //setup routes or something $app->run();
使用Symfony配置
如果您想在项目中使用symfony配置文件,实际上可以这样做
<?php declare(strict_types=1); use JanGolle\SlimSymfonyContainer\ContainerManager; use JanGolle\SlimSymfonyContainer\Loader\SlimDefaultServicesInjection; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; $containerManager = new ContainerManager(); $container = new ContainerBuilder(); $loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/path/to/config')); $loader->load('services.yaml'); $container = $containerManager->resolveContainer($container, new SlimDefaultServicesInjection()); $app = new \Slim\App($container); //setup routes or something $app->run();
您的services.yaml参数块可能如下所示
parameters: slim.settings.httpVersion: '1.1' slim.settings.responseChunkSize: 4096 slim.settings.displayErrorDetails: !php/const DEBUG
注意:您可以在配置文件中使用自定义值覆盖默认SLIM设置,或者不覆盖,这取决于您。所有SLIM必要设置都将根据您的参数应用或未应用进行容器注入。
自定义包装类
如果您有自己的容器,它是Symfony\Component\DependencyInjection\ContainerBuilder的实例,并且您想使用Slim依赖项设置它,可以这样做
$container = new YourCustomContainer($fullOfParams);//instance of Symfony\Component\DependencyInjection\ContainerBuilder $container = $containerManager->resolveContainer($container, new SlimDefaultServicesInjection());
或者您可以直接通过::class作为resolveContainer的第一个参数使用默认构造函数实例化它
$container = $containerManager->resolveContainer(YourCustomContainer::class, new SlimDefaultServicesInjection());
在应用中访问容器
在您的路由作用域内,$this将返回我们的容器,实际上它是Symfony\Component\DependencyInjection\ContainerBuilder的实例
//... $app->get( '/your/route', function (Request $request, Response $response, array $args) { $this->get('someService')->doSomeStuff(); return $response; } );
PhpStorm Symfony插件支持
如果您正在使用PhpStorm IDE,您可以在其中安装Symfony插件并访问服务的类型提示和IDE自动补全。
感谢您的关注!