jsoumelidis / zend-sf-di-config
PSR-11 Symfony DI 容器配置器,适用于 ZF 和 Expressive 应用程序
0.5.1
2021-03-30 12:22 UTC
Requires
- php: >=7.1
- symfony/dependency-injection: ^3.4 || ^4.4.9 || ^5.0.9
Requires (Dev)
- laminas/laminas-coding-standard: ~2.1.2
- laminas/laminas-container-config-test: ^0.4.0 || 0.4.x-dev
- phpspec/prophecy-phpunit: ^2.0.1
- phpunit/phpunit: >=9.3.0
- symfony/config: ^4.4.9 || ^5.0.9
Suggests
- symfony/config: Required for symfony DI dumping functionality
This package is auto-updated.
Last update: 2024-08-29 03:49:48 UTC
README
此库提供了一些工具,用于使用 zend-servicemanager 配置来配置一个与 PSR-11 兼容的 Symfony DI 容器。
安装
运行以下命令来安装此库
$ composer require jsoumelidis/zend-sf-di-config
配置
要获取一个配置好的 Symfony DI 容器,请按照以下步骤操作
<?php use JSoumelidis\SymfonyDI\Config\Config; use JSoumelidis\SymfonyDI\Config\ContainerFactory; $factory = new ContainerFactory(); $container = $factory( new Config([ 'dependencies' => [ 'services' => [], 'invokables' => [], 'factories' => [], 'aliases' => [], 'delegators' => [], ], // ... other configuration ]) );
dependencies
子关联数组可以包含以下键
services
:一个将键映射到特定服务实例的关联数组。invokables
:一个将键映射到无参数构造函数的服务;即对于不需要构造函数参数的服务。键和服务名称可能相同;如果不相同,名称被视为别名。factories
:一个将服务名称映射到工厂类名称的关联数组,或任何可调用的对象。工厂类必须可以不带参数实例化,并在实例化后可调用(即实现 __invoke() 方法)。aliases
:一个将别名映射到服务名称(或另一个别名)的关联数组。delegators
:一个将服务名称映射到委托工厂键列表的关联数组,有关更多详细信息,请参阅 Expressive 委托文档。
请注意,整个配置都在
config
键下的$container
中可用$config = $container->get('config');
与 Expressive 一起使用
将 config/container.php
的内容替换为以下内容
<?php use JSoumelidis\SymfonyDI\Config\Config; use JSoumelidis\SymfonyDI\Config\ContainerFactory; $config = require __DIR__ . '/config.php'; $factory = new ContainerFactory(); return $factory(new Config($config));
预先配置 ContainerBuilder
可以将已实例化的 ContainerBuilder 作为 ContainerFactory 的第二个参数传递
<?php use JSoumelidis\SymfonyDI\Config\Config; use JSoumelidis\SymfonyDI\Config\ContainerFactory; $config = require __DIR__ . '/config.php'; $containerBuilder = new \Symfony\Component\DependencyInjection\ContainerBuilder(); //...Your work here... $factory = new ContainerFactory(); return $factory(new Config($config), $containerBuilder);
转储/缓存容器
Symfony DI 容器的转储功能现在已支持。有关在 Expressive 中使用的信息,请参阅以下示例。有关编译、转储和缓存 Symfony DIC 配置的更多信息,请访问 symfony 文档 此处
此功能需要 symfony/config 包
<?php use JSoumelidis\SymfonyDI\Config\Config; use JSoumelidis\SymfonyDI\Config\ContainerFactory; use Symfony\Component\DependencyInjection\Dumper\PhpDumper; $factory = new ContainerFactory(); $config = require __DIR__ . '/config.php'; $cachedContainerFile = 'someFileToDumpContainerConfiguration.php'; $containerConfig = new Config($config, true); //set 2nd argument to true while //instantiating Config to register //services as synthetic if (file_exists($cachedContainerFile)) { //load cached container require_once($cachedContainerFile); //boot the cached container $container = new ProjectServiceContainer(); //Default class for Symfony DI //re-set synthetic services, this is mandatory $containerConfig->setSyntheticServices($container); return $container; } $container = $factory($containerConfig); //... other user configuration here $container->compile(); file_put_contents($cachedContainerFile, (new PhpDumper($container))->dump()); return $container;