acelaya/slim-container-sm

此软件包已被放弃且不再维护。未建议替代软件包。

一个封装了 ZF2 ServiceManager 的 Slim 框架容器

v2.0.0 2016-01-24 11:07 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:43:42 UTC


README

Build Status Code Coverage Scrutinizer Code Quality Latest Stable Version Total Downloads License

一个 Slim 框架 v2 容器封装了 Zend ServiceManager v3,以便可以从其中获取服务。

当前稳定版本依赖于 ServiceManager 的第 3 版。如果您需要使用第 2 版,请安装此组件的第 1 版。

安装

使用 composer 安装。只需运行此命令。

composer require acelaya/slim-container-sm

使用方法

此库提供了一个简单的类,即 Acelaya\SlimContainerSm\Container,它扩展了 Slim\Helper\Set 并封装了一个 ServiceManager 实例(可以注入到其中或按需加载)。

通过用这个容器替换 Slim 的容器对象,可以使 Slim 框架从 ServiceManager 中获取服务,这更加高级和可配置。

use Acelaya\SlimContainerSm\Container;
use Slim\Slim;
use Vendor\ComplexClass;
use Vendor\MyAbstractFactory;
use Zend\ServiceManager\Factory\InvokableFactory;
use Zend\ServiceManager\ServiceManager;

// Create a ServiceManager that is going to be used by the application and add some services to it
$sm = new ServiceManager([
    'factories' => [
        'complex_service' => function ($sm) {
            // Do stuff...
            
            return new ComplexClass();
        },
        'foo_invokable' => InvokableFactory::class,
    ],
    'abstract_factories' => [
        MyAbstractFactory::class
    ],
    'aliases' => [
        'foo' => 'foo_invokable'
    ]
]);
// Inject the ServiceManager in the new container
$container = new Container($sm);

// Create Slim object which will initialize its container
$app = new Slim();
// Inject default Slim services into our container
$container->consumeSlimContainer($app->container);
// Override Slim's container with the new one
$app->container = $container;

完成此操作后,Slim 将继续使用新容器作为其自身的容器,您可以使用 ServiceManager 创建更复杂的服务。

此库与 rka-slim-controllerslimcontroller 非常有用,这两个库都允许在 Slim 框架中以服务的形式创建控制器。结合使用这些库,您将能够在 ServiceManager 中注册控制器。

无效方法

由于 ServiceManager 的工作方式,Slim\Helper\Set 中存在无法使用的方法。这些方法是 allkeyscountgetIterator。这些方法将抛出 Acelaya\SlimContainerSm\Exception\BadMethodCallException。这使得 Acelaya\SlimContainerSm\Container 不可迭代。