cubicmushroom / slim-service-manager
Slim 框架插件,用于处理从配置中加载服务
Requires
- cubicmushroom/exceptions: *
- slim/slim: ~2.0
Requires (Dev)
README
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);
-
首先,将
'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);
-
然后,您只需要实例化 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
部分所定义。