cubicmushroom/slim-service-manager

Slim 框架插件,用于处理从配置中加载服务

1.3.6 2015-02-25 12:24 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:18:46 UTC


README

Build Status

Slim 框架服务管理器

服务加载器用于根据服务配置为 Slim 框架应用准备服务。

所有与服务管理器注册的服务名称都以前缀 '@' 开头。因此,this_service 的服务名称将被注册为 @this_service

用法

以下是一个使用 Service Loader 的快速示例...

// Define the services 
$config = [
    'services' => [
        'serviceOne' => [
            'class' => 'ServiceOne',
            'arguments' => ['a', 'b', 'c', '@serviceTwo'],
            'tags' => [
                ['tagName', ['tagArg1', 'tagArg2' => 'tagsArg2Value']]
            ],
        ],
        'serviceTwo' => [
            'class' => 'Namespace\ServiceTwo',
            'calls' => [
                ['setServiceThree', ['@ServiceThree']]
            ]
        ],
        'serviceThree' => [
            'class' => 'Namespace\ServiceThree'
        ],
    ]
];

$app = new Slim($config);

$serviceManagerOptions = [
    'registerAsService' => true,              // default value
    'ownServiceName'    => 'service_manager', // default value
    'autoload'          => true               // default value
    'registerApp'       => true               // default value
];

new ServiceManager($app, $serviceManagerOptions);
  1. 首先,将 'services' 元素添加到传递给 Slim 对象的配置中。

     $config = [
         'services' => [
             'serviceOne' => [
                 'class' => 'ServiceOne',
                 'arguments' => ['a', 'b', 'c', '@serviceTwo'],
             ],
             'serviceTwo' => [
                 'class' => 'Namespace\ServiceTwo',
                 'calls' => [
                     ['setServiceThree', ['@ServiceThree']]
                 ]
             ],
             'serviceThree' => [
                 'class' => 'Namespace\ServiceThree'
             ],
         ]
     ];
    
     $app = new Slim($config);
    
  2. 然后,您只需要实例化 ServiceManager 对象,传递 App,以及可选的配置选项。此示例显示了配置选项的默认值。

     $serviceManagerOptions = [
         'registerAsService' => true,              // default value
         'ownServiceName'    => 'service_manager', // default value
         'autoload'          => true               // default value
         'registerApp'       => true               // default value
     ];
     
     new ServiceManager($app, $serviceManagerOptions);
    

服务定义

服务定义应该是一个项目数组,其中键是服务将被注册的名称,值是以下设置数组...

class

Require

用于实例化服务对象的完整类名。

arguments

Optional

传递给服务对象构造函数的参数数组。

以 '@' 开头的字符串值将被替换为与服务名称匹配的服务,去掉前面的 '@'。

calls

Optional

包含要在初始化的服务对象上调用每个附加方法的详细信息的数组。数组中的每个条目应是一个数组,第一个条目是要调用的方法名称,可选的第二个数组项将用作方法调用的参数。

arguments 类似,任何在参数数组中以 '@' 开头的字符串都将替换为名称匹配的服务,去掉前面的 '@'。

tags

Optional

可以用来通过标签过滤服务定义的标签数组。

数组中的每个条目应包含作为第一个条目的标签名称,以及可选的第二个条目的参数数组。

然后,您可以使用 $serviceManager->getTaggedServices('tagName') 通过标签检索服务。

参数

以下是对每个选项的解释...

选项

构造函数的第二个参数...

options.autoload

是否在实例化时自动注册服务

options.ownServiceName

默认: 'service_manager'

注册服务管理器时使用的名称。

options.registerApp

默认: true

如果设置为 true,服务管理器将使用键 @app 将应用注册为服务。

options.registerAsService

默认: true

如果设置为 true,服务管理器将使用 ownServiceName 设置的值将自己注册为服务。

ServiceManager 方法

以下方法在 ServiceManager 中可用...

registerApp()

将应用注册为服务。如果 options.registerApp 设置为 false,则需要调用此方法,否则会自动调用。

setupServices()

加载所有服务。如果 options.autoload 设置为 false,则会自动调用此方法

registerSelfAsService()

使用 options.ownServiceName 的值(或默认值)将 ServiceManager 注册为服务。如果 options.registerAsService 为 true,则会自动调用此方法。

getService($serviceName)

返回具有给定名称的服务。

getTaggedServices($tagName)

返回一个数组,包含带有给定标记的服务。

返回的数组将包含已注册的服务名称,以 '@' 为前缀作为键,ServiceDefinition 对象作为值。

其他类

ServiceDefinition

此类用于注册服务时。它用于常规闭包之上,以便可以将服务名称和配置存储在对象中。

使用 __invoke() 方法在请求时实例化服务对象。

MethodCallDefinition

此类在实例化时存储对方法上的任何调用,如服务定义中的 calls 部分所定义。

Tag

此类存储每个标记的名称和参数,如服务定义中的 tags 部分所定义。