椭圆容器/容器覆盖

Psr-11 容器装饰器,允许在运行时覆盖容器条目

1.0.1 2018-02-23 09:48 UTC

This package is auto-updated.

Last update: 2024-08-26 00:16:55 UTC


README

本软件包提供了一个 Psr-11 容器 装饰器,允许在运行时覆盖容器条目。

要求 php >= 7.0

安装 composer require ellipse/container-overridden

运行测试 ./vendor/bin/kahlan

装饰容器

本软件包提供了一个 Ellipse\Container\OverriddenContainer 类,可用于装饰任何 Psr-11 容器。它接受一个别名 => 值对的关联数组作为第二个参数。一旦装饰,容器的 ->has() 方法将在给定的别名是这个数组的键时返回 true,而 ->get() 方法将返回其关联的值。当别名不是数组的键时,将使用原始容器的 ->has()->get() 方法。

当与 ellipse/container-reflection 一起使用时,特别有用。

<?php

namespace App;

class SomeClass
{
    public function __construct(SomeOtherClass $class)
    {
        //
    }
}
<?php

namespace App;

use Psr\Http\Message\ServerRequestInterface;

class SomeOtherClass
{
    public function __construct(ServerRequestInterface $request)
    {
        //
    }
}
<?php

use Psr\Http\Message\ServerRequestInterface;

use Some\Psr7ServerRequestFactory;
use Some\Psr11Container;

use Ellipse\Container\ReflectionContainer;
use Ellipse\Container\OverriddenContainer;

use App\SomeClass;

// Get a Psr-7 request from somewhere.
$request = Psr7ServerRequestFactory::fromGlobals();

// Get an instance of some Psr-11 container.
$container = new Psr11Container;

// Decorate the container.
$container = new ReflectionContainer(
    new OverriddenContainer($container, [
        ServerRequestInterface::class => $request,
    ])
);

// Returns an instance of SomeClass with the overridden Psr-7 instance injected in it's
// SomeOtherClass dependency.
$container->get(SomeClass::class);