shadowhand/cairon

该软件包已被废弃,不再维护。未建议替代软件包。

auryn 依赖注入器的配置包装器

0.1.0 2017-04-01 02:29 UTC

This package is auto-updated.

Last update: 2019-08-16 20:57:32 UTC


README

Become a Supporter Latest Stable Version License Build Status Code Coverage Scrutinizer Code Quality

A tiny wrapper around an auryn that provides configuration capabilities. Attempts to be PSR-1, PSR-2, and PSR-4 compliant.

使用方法

cairon 的基本目的是将可调用的配置应用于 auryn。

这可以通过使用带有可调用项列表的 configure() 或使用单个可调用项的 apply() 来完成。

use Auryn\Injector;
use Cairon\InjectorConfig;

$injector = InjectorConfig::make()
    ->configure([
        Acme\Injector\Foo::class,
        ['SomeClass::staticMethod']
        function (Injector $injector) { /* ... */ }
        // ...
    ])
    ->apply([$someObject, 'method'])
    ->injector();

可调用项

可调用项的唯一要求是它接受一个 Auryn\Injector 实例作为第一个和唯一的参数

fn(Injector $injector): void

注意:如果提供的配置当前不可调用,则假定其为类名,并通过调用 Injector::make() 来解析。

最佳实践

使用 cairon 的首选方法是通过创建一个包含的闭包。这消除了创建配置的具体类,并推广了 auryn 只在引导过程中使用的理念。

例如,我们可以创建 config/injection/psr7.php

use Auryn\Injector;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\ServerRequest;
use Zend\Diactoros\ServerRequestFactory;

return function (Injector $injector) {
    $injector->alias(ServerRequestInterface::class, ServerRequest::class);
    $injector->delegate(ServerRequestInterface::class, 'ServerRequestFactory::fromGlobals');
};

然后在我们引导时应用它

use Cairon\InjectorConfig;

$injector = InjectorConfig::make()
    ->configure([
        require __DIR__ . '/config/injection/psr7.php',
    ])
    ->injector();

现有注入器

如果您已经有一个 Auryn\Injector 实例,则可以将其提供给构造函数

$injector = new Injector();

$config = InjectorConfig::make($injector);

assert($injector === $config->injector());

灵感

cairon 背后的理论来自elazar/auryn-configuration。这种相同的理论也被equip/config采用。我的目标是简化理论,使其成为一个可以与任何可调用项一起使用的包装器,而不需要实现具体的接口。

许可

MIT。