palmtree/container

Palmtree PHP 的服务容器组件

v2.0.3 2021-02-19 12:23 UTC

README

License Build Status Scrutinizer Code Coverage

兼容 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 许可证 下发布