thecodingmachine/common-factories

本项目提供可以直接用于符合container-interop/service-provider标准的提供者中的实用工厂。

v0.4.1 2018-08-17 21:27 UTC

This package is auto-updated.

Last update: 2024-09-06 23:27:35 UTC


README

Scrutinizer Code Quality Build Status Coverage Status

container-interop/service-provider的实用工厂

工作正在进行中。

本项目是container-interop组的成员之一。它试图通过容器无关的配置方式来解决跨框架模块(也称为包)的问题。

本项目目标

本项目提供可以直接用于符合container-interop/service-provider标准的提供者中的实用工厂。

这些通用工厂可以被编译/缓存的容器检测到。本包的目标是提供一组有用的类,这些类还可以被优化容器预先处理以获得最佳性能。

用法

只需在声明你的提供者的包中引入此包

到目前为止,该包有thecodingmachine供应商名称。它有望迁移到container-interop/common-factories

composer require thecodingmachine/common-factories

然后,你可以使用以下3个可用的类之一

创建别名

使用Alias类轻松创建别名。

public function getFactories() {
    return [
        'myAlias' => new Alias('myService')
    ]
}

可以轻松替换

public function getFactories() {
    return [
        'myAlias' => function(ContainerInterface $container) {
            return $container->get('myService');
        }
    ]
}

创建参数

使用Parameter类在容器中添加一个标量(或标量数组)条目

public function getFactories() {
    return [
        'DB_HOST' => new Parameter('localhost')
    ]
}

可以轻松替换

public function getFactories() {
    return [
        'DB_HOST' => function() {
            return 'localhost';
        }
    ]
}

向服务数组中添加服务

使用AddToArray类将新服务推送到现有数组中

public function getExtensions() {
    return [
        MyTwigExtension::class => function() {
            return new MyTwigExtension();
        },
        'twig.extensions' => new AddToArray(MyTwigExtension::class)
    ]
}

可以轻松替换

public function getExtensions() {
    return [
        MyTwigExtension::class => function() {
            return new MyTwigExtension();
        },
        'twig.extensions' => function(ContainerInterface $container, array $extensions = []) {
            $extensions[] = $container->get(MyTwigExtension::class);
            return $extensions;
        }
    ]
}