处理容器服务定义
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.3,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
处理容器服务定义
服务定义的指令描述容器应如何构建服务。他们没有实际的应用程序使用的服务
获取和设置服务定义
有一些有用的方法来处理服务定义。
找出是否有定义一个服务id:
1
美元容器- >hasDefinition (美元serviceId);
这是有用的,如果你只是想做一些事情,如果存在一个特定的定义。
您可以检索一个定义:
1
美元容器- >getDefinition (美元serviceId);
或者:
1
美元容器- >findDefinition (美元serviceId);
它不像getDefinition ()
因此,如果还解决了别名serviceId美元
参数是你会得到底层别名定义。
服务定义本身如果你检索对象定义与这些方法和对其进行更改会反映在容器中。然而,如果你创建一个新的定义,您可以将其添加到容器使用:
1 2 3 4
使用ob娱乐下载\组件\DependencyInjection\定义;美元定义=新定义(“Acme \服务\ MyService”);美元容器- >setDefinition (“acme.my_service”,美元定义);
提示
注册服务定义是如此常见,容器提供了一种快捷方法注册()
:
1
美元容器- >注册(“acme.my_service”,“Acme \服务\ MyService”);
使用一个定义
类
第一个可选参数定义
类的完全限定类名是返回的对象从容器获取服务时:
1 2 3
使用ob娱乐下载\组件\DependencyInjection\定义;美元定义=新定义(“Acme \服务\ MyService”);
如果类实例化时是未知的定义
类,使用setClass ()
方法设置后:
1
美元定义- >setClass (“Acme \服务\ MyService”);
找出类将定义:
1 2
美元类=美元定义- >getClass ();/ / $类=“Acme \服务\ MyService”
构造函数参数
的第二个可选参数定义
类是一个数组对象的参数传递到构造函数返回当服务获取的容器:
1 2 3 4 5 6
使用ob娱乐下载\组件\DependencyInjection\定义;美元定义=新定义(“Acme \服务\ MyService”,数组(“argument1”= >“value1”,“argument2”= >“value2”));
如果参数是未知的,当实例化定义
类或如果你想添加新的参数,使用addArgument ()
方法,该方法将它们添加在最后的参数数组:
1
美元定义- >addArgument (美元论点);
得到一个数组构造函数参数的定义可以使用:
1
美元定义- >getArguments ();
或一个参数,其位置:
1 2
美元定义- >getArgument (美元指数);/ /例如$定义- > getArgument为第一个参数(0)
参数可以是一个字符串,通过使用一个数组或一个服务参数% parameter_name %
语法:
1
美元定义- >addArgument (“% kernel_debug %”);
如果参数是另一个服务,不要使用get ()
方法来获取它,因为它不会在定义服务可用。相反,使用参考类来获得服务的引用可以服务容器一旦完全建立:
1 2 3 4 5
使用ob娱乐下载\组件\DependencyInjection\参考;/ /……美元定义- >addArgument (新引用(“service_id”));
以类似的方式你可以换一个已经设置参数通过索引使用:
1
美元定义- >replaceArgument (美元指数,美元论点);
你也可以替换所有的参数(或设置一些如果没有)数组的参数:
1
美元定义- >setArguments (美元参数);
方法调用
如果服务您正在与使用setter注入就可以操纵定义中的任何方法调用。
你可以得到一个数组的所有方法调用:
1
美元定义- >getMethodCalls ();
添加一个方法调用:
1
美元定义- >addMethodCall (美元方法,美元参数);
在哪里美元的方法
方法名和吗美元的参数
是一个数组的参数调用该方法。参数可以是字符串、数组参数或服务id作为构造函数参数。
你也可以用一个数组替换任何现有的方法调用的新的:
1
美元定义- >setMethodCalls (美元methodCalls);
提示
有更多的例子,具体的工作方式与定义的PHP代码块配置示例页等使用一个工厂来创建服务和与家长服务管理常见的依赖关系。
请注意
改变服务定义的方法只能用在容器被编译。一旦容器被编译不能操作进一步服务定义。更多地了解编译容器编译的容器。
要求的文件
会用例之前当你需要包含另一个文件服务本身被加载。为此,您可以使用setFile ()方法:
1
美元定义- >setFile (' / / /文件/ src /路径直接给的);
注意,Symfony会在ob娱乐下载内部调用PHP语句require_once
,这意味着每个请求的文件只包含一次。