palmtree / container
Palmtree PHP 的服务容器组件
v2.0.3
2021-02-19 12:23 UTC
Requires
- php: >=7.1
- psr/container: ~1.0
- symfony/yaml: ~4.2
Requires (Dev)
- palmtree/php-cs-fixer-config: ^1.0
- phpunit/phpunit: ~7.5
Provides
- psr/container-implementation: 1.0.0
This package is auto-updated.
Last update: 2024-08-23 03:48:14 UTC
README
兼容 PSR-11 的服务容器
支持环境变量参数、工厂和私有服务。
需求
- PHP >= 7.1
对于 PHP >= 5.6 的支持,请使用 v1.0
安装
使用 composer 将包添加到您的依赖中
composer require palmtree/container
用法
定义参数和服务
# config.yml parameters: database_name: 'mydb' database_user: 'mydb_user' database_password: '%env(DB_PASSWORD)%' env(DB_PASSWORD): 123456 # Default env parameter used if environment variable is not set imports: - { resource: services.yml } - { resource: secrets.yml }
# services.yml services: my_service: class: MyNamespace\MyService arguments: [arg1, '%database_name%'] my_other_service: class: MyNamespace\MyOtherService arguments: ['@my_service'] calls: - method: doThing arguments: [arg1, arg2]
# secrets.yml parameters: secret: 'TopsyCrett'
创建容器
<?php use Palmtree\Container\ContainerFactory; $container = ContainerFactory::create('config.yml'); $container->get('my_service')->myMethod(); $container->getParameter('db_username');
高级用法
工厂
可以通过调用静态工厂方法来创建服务。参数将传递给工厂方法。
# services.yml services: my_service: factory: 'MyNamespace\MyFactory:createService' arguments: [argForCreateService]
私有服务
服务可以定义为私有的,这意味着它们只能通过依赖注入使用,不能直接从容器中检索
# services.yml services: my_service: class: MyNamespace\MyService public: false my_consumer: class: MyNamespace\MyConsumer arguments: - "@my_service"
以下将抛出 ServiceNotPublicException 异常
<?php $container->get('my_service');
而以下将正常工作
<?php namespace MyNamespace; class MyConsumer { public function __construct(MyService $myService) { } }
先前的技术
受 Symfony 的 DependencyInjection 组件的启发。
许可证
在 MIT 许可证 下发布