acelaya / slim-container-sm
一个封装了 ZF2 ServiceManager 的 Slim 框架容器
Requires
- php: ^5.5|^7.0
- slim/slim: ~2.4
- zendframework/zend-servicemanager: ~3.0
Requires (Dev)
- phpunit/phpunit: ~4.8
- squizlabs/php_codesniffer: ~2.0
Suggests
- akrabat/rka-slim-controller: Allows to create controllers as a service in Slim Framework
- slimcontroller/slimcontroller: Allows to create controllers as a service in Slim Framework
This package is not auto-updated.
Last update: 2022-02-01 12:43:42 UTC
README
一个 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-controller 和 slimcontroller 非常有用,这两个库都允许在 Slim 框架中以服务的形式创建控制器。结合使用这些库,您将能够在 ServiceManager 中注册控制器。
无效方法
由于 ServiceManager 的工作方式,Slim\Helper\Set
中存在无法使用的方法。这些方法是 all
、keys
、count
和 getIterator
。这些方法将抛出 Acelaya\SlimContainerSm\Exception\BadMethodCallException
。这使得 Acelaya\SlimContainerSm\Container
不可迭代。