laminas/laminas-pimple-config

此包已被弃用且不再维护。没有建议替代包。

PSR-11 Pimple 容器配置器,用于 Laminas 和 Mezzio 应用程序

1.6.0 2022-12-21 08:01 UTC

README

弃用

此包已被弃用且将不再进行进一步开发!

请参阅技术指导委员会会议纪要

🇷🇺 俄罗斯公民

我们,Laminas 的参与者,来自不同的国家。我们中许多人有在俄罗斯和乌克兰的朋友、亲属和同事。我们中的一些人出生在俄罗斯。我们中的一些人现在住在俄罗斯。我们中的一些人的祖父母在二战中与法西斯作战。这里没有人支持法西斯主义。

我们中有一个乌克兰亲属,她和儿子一起逃离了家园。由于前方道路上的轰炸,火车延误了。我们有一些朋友在防空洞里躲避。我们在空袭后焦急地关注他们的消息,空袭无差别地攻击医院、学校、幼儿园和房屋。我们不是从任何媒体上得知这些,我们直接目睹了这一切。

您足够信任我们使用我们的程序,我们请求您再次信任我们。我们需要您的帮助。走出家门,抗议这场毫无意义的战争。停止杀戮。说“不,战争!”

🇺🇸 致俄罗斯公民

我们来自世界各地的 Laminas 团队。我们中许多人有在俄罗斯和乌克兰的朋友、家人和同事。我们中的一些人出生在俄罗斯。我们中的一些人现在住在俄罗斯。我们中的一些人的祖父母在二战中与纳粹作战。这里没有人支持法西斯主义。

团队成员中有一个乌克兰亲属,她和儿子一起逃离了家园。由于前方道路上的轰炸,火车延误了。我们有一些朋友在防空洞里躲避。我们在空袭后焦急地关注他们的消息,空袭无差别地攻击医院、学校、幼儿园和房屋。我们不是从任何媒体上得知这些,我们直接目睹了这一切。

您足够信任我们使用我们的软件。我们请求您信任我们说出真相。我们需要您的帮助。走出家门,抗议这场毫无意义的战争。停止杀戮。说“停止战争!”

此库提供了配置PSR-11兼容的Pimple 容器的实用工具,用于Mezzio应用程序。

安装

运行以下命令来安装此库

$ composer require laminas/laminas-pimple-config

配置

要获取配置好的PSR-11 Pimple 容器,请执行以下操作

<?php
use Laminas\Pimple\Config\Config;
use Laminas\Pimple\Config\ContainerFactory;

$factory = new ContainerFactory();

$container = $factory(
    new Config([
        'dependencies' => [
            'services'          => [],
            'invokables'        => [],
            'factories'         => [],
            'aliases'           => [],
            'delegators'        => [],
            'extensions'        => [],
            'shared'            => [],
            'shared_by_default' => true,
        ],
        // ... other configuration
    ])
);

子关联数组 dependencies 可以包含以下键

  • services:一个关联数组,将键映射到特定的服务实例。
  • invokables:一个关联数组,将键映射到无参构造函数的服务;即对于不需要构造函数参数的服务。键和服务名称通常相同;如果它们不同,则键被视为别名。
  • factories:一个关联数组,将服务名称映射到工厂类名称,或任何可调用对象。工厂类必须无参可实例化,并且一旦实例化即可调用(即实现__invoke()方法)。
  • aliases:一个关联数组,将别名映射到服务名称(或另一个别名)。
  • delegators:一个关联数组,将服务名称映射到委托工厂键的列表,有关详细信息,请参阅Mezzio 委托者文档
  • extensions:一个关联数组,将服务名称映射到扩展工厂名称的列表,有关详细信息,请参阅下文部分
  • shared:一个关联数组,将服务名称映射到布尔值,以指示服务管理器是否应该缓存通过get方法创建的服务,独立于shared_by_default设置。
  • shared_by_default:一个布尔值,指示通过get方法创建的服务是否应该被缓存。默认值为true

请注意,整个配置都可在config键的$container中找到。

$config = $container->get('config');

extensions

extensions配置仅在Pimple容器中使用。如果您使用Aura.Dilaminas-servicemanager,则可以使用delegators代替。如果您希望保持最高的兼容性并可能考虑将来更改所使用的容器库,则建议使用delegators

扩展工厂具有以下签名

use Psr\Container\ContainerInterface;

public function __invoke(
    $service,
    ContainerInterface $container,
    $name
);

传递给扩展工厂的参数如下

  • $service是实际的服务实例。
  • $container是用于为请求的服务创建扩展时使用的容器。
  • $name是请求的服务名称。

以下是一个扩展工厂的示例

use Psr\Container\ContainerInterface;

class ExtensionFactory
{
    public function __invoke($service, ContainerInterface $container, $name)
    {
        // do something with $service

        return $service;
    }
}

您还可以从扩展工厂返回不同的实例

use Psr\Container\ContainerInterface;

class ExtensionFactory
{
    public function __invoke($service, ContainerInterface $container, $name)
    {
        return new Decorator($service);
    }
}

请注意,在配置扩展时,必须为服务提供一个列表的扩展工厂,而不是单个扩展工厂名称

new Config([
    'dependencies' => [
        'invokables' => [
            'my-service' => MyInvokable\Service::class,
        ],
        'extensions' => [
            'my-service' => [
                Extension1Factory::class,
                Extension2Factory::class,
                // ...
            ],
        ],
    ],
]);

服务扩展的调用顺序与列表中定义的顺序相同。

与Mezzio一起使用

config/container.php的内容替换为以下内容

<?php

use Laminas\Pimple\Config\Config;
use Laminas\Pimple\Config\ContainerFactory;

$config  = require __DIR__ . '/config.php';
$factory = new ContainerFactory();

return $factory(new Config($config));