getsky / phalcon-autoload-services
依赖注入中自动注册服务的组件
v1.1.0
2014-10-07 10:27 UTC
Requires
- php: >=5.4
- ext-phalcon: >=1.2.4,<2
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-24 01:07:41 UTC
README
此组件允许使用设置文件在DI中注册服务。
组件的主要功能
- 服务可以通过字符串、对象或服务提供者进行初始化;
- 服务通过配置文件进行连接;
- 服务可以作为“共享”服务进行注册;
要求
- PHP 5.4
- Phalcon 框架
Phalcon 框架: http://phalconphp.com/
使用
注册执行代码所需的必要服务
$services = new Ini('services.ini'); $dic = new FactoryDefault(); $registrant = new Registrant($services); $registrant->setDi($dic); $registrant->registration();
配置服务
注册服务有三种方式
-
通过类名。此方法不允许向构造函数传递参数或调整参数。
[response] string = "Phalcon\Http\Response"
-
直接注册实例。当使用此方法时,容器已放置依赖关系已经完成的对象。
[request] object = "Phalcon\Http\Response"
-
通过服务提供者。它必须实现接口
GetSky\Phalcon\AutoloadServices\Provider。根据计划,提供者是容器中匿名函数注册的中间件,但有机会实现任何其他支持Phalcon的方式。[route] provider = "RouteProvider"
对于第二种和第三种方法,可以指定传递给构造函数的参数,并从其创建到放置在DI之前调用方法。下面是一个如何使用ini实现的示例
[first-service] provider = "SomeNamespace\FirstClass" arg.0.service = "config" arg.1.var = "24" arg.2.di = 1 arg.3.s-service = "shared-service" arg.4.object.object = "SoeNamespace\SecondClass" arg.4.object.arg.0.var = "42" arg.4.object.call.0.method = "run"
在上面的示例中,我们注册了名为 first-service 的服务 SomeNamespace\FirstClass,并传递了5个参数:服务 config、变量 24、DI(实现 DiInterface 的对象)、由方法 getShared 造成的共享服务 shared-services 以及首先使用传递 42 并调用 run 创建的 SomeNamespace\SecondClass 的实例。