如何使用服务定义对象

编辑该页面

如何使用服务定义对象

服务定义的指令描述容器应如何构建服务。他们没有实际的应用程序使用的服务。容器将创建实际的类实例根据配置的定义。

通常情况下,您将使用YAML、XML或PHP来描述服务定义。但如果你做高级的事情与服务容器,像使用编译器通过或创建一个依赖注入的扩展,你可能需要直接与工作定义定义一个服务将如何实例化的对象。

获取和设置服务定义

有一些有用的方法来处理服务定义:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用ob娱乐下载\组件\DependencyInjection\定义;/ /发现如果有“app.mailer”定义美元容器- >hasDefinition (“app.mailer”);/ /发现如果有“app.mailer”定义或别名美元容器- >有(“app.mailer”);/ /获取“app.user_config_manager”定义美元定义=美元容器- >getDefinition (“app.user_config_manager”);/ /得到“app.user_config_manager”的定义ID或别名美元定义=美元容器- >findDefinition (“app.user_config_manager”);/ /添加一个新的“app.number_generator”定义美元定义=定义(\ App \ NumberGenerator::类);美元容器- >setDefinition (“app.number_generator”,美元定义);/ /快捷方式前的方法美元容器- >注册(“app.number_generator”,\ App \ NumberGenerator::类);

使用一个定义

创建一个新的定义

除了操作和检索现有定义,也可以定义新服务定义定义类。

第一个可选参数定义类的完全限定类名是返回的对象从容器获取服务时:

1 2 3 4 5 6 7 8 9 10 11
使用应用程序\配置\CustomConfigManager;使用应用程序\配置\UserConfigManager;使用ob娱乐下载\组件\DependencyInjection\定义;美元定义=定义(UserConfigManager::类);/ /覆盖类美元定义- >setClass (CustomConfigManager::类);/ /得到的类配置这个定义美元=美元定义- >getClass ();

构造函数参数

的第二个可选参数定义类是一个数组对象的参数传递到构造函数返回当服务获取的容器:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27
使用应用程序\配置\DoctrineConfigManager;使用ob娱乐下载\组件\DependencyInjection\定义;使用ob娱乐下载\组件\DependencyInjection\参考;美元定义=定义(DoctrineConfigManager::类,引用(“原则”),/ /引用到另一个服务“% app.config_table_name %”,/ /将解决一个容器参数的值]);/ /获取所有参数配置为这个定义美元constructorArguments=美元定义- >getArguments ();/ /得到一个特定的参数美元firstArgument=美元定义- >getArgument (0);/ /添加一个新的命名参数/ / ' argumentName美元' =在构造函数中参数的名称,包括“$”符号美元定义=美元定义- >setArgument (“argumentName美元”,美元argumentValue);/ /添加一个新参数美元定义- >addArgument (美元argumentValue);/ /替换参数在特定指数(0 =第一个参数)美元定义- >replaceArgument (美元指数,美元论点);/ /取代所有先前配置参数与传递数组美元定义- >setArguments (美元参数);

谨慎

不要使用get ()来得到你想要的服务将作为构造函数的参数,该服务还没有可用的。相反,使用一个参考实例如上所示。

方法调用

如果服务您正在与使用setter注入就可以操纵定义中的任何方法调用:

1 2 3 4 5 6 7 8 9 10 11
/ /获取所有已配置的方法调用美元methodCalls=美元定义- >getMethodCalls ();/ /配置一个新的方法调用美元定义- >addMethodCall (“setLogger”,(引用(“日志”)));/ /配置一个immutable-setter美元定义- >addMethodCall (“withLogger”,(引用(“日志”)),真正的);/ /替换所有先前配置方法调用传递的数组美元定义- >setMethodCalls (美元methodCalls);

提示

有更多的例子,具体的工作方式与定义的PHP代码块服务容器等物品使用一个工厂来创建服务如何管理共同依赖父母服务

请注意

改变服务定义的方法只能用在容器被编译。一旦容器被编译不能操作进一步服务定义。更多地了解编译容器,明白了编译的容器

要求的文件

会用例之前当你需要包含另一个文件服务本身被加载。为此,您可以使用setFile ()方法:

1
美元定义- >setFile (' / / /文件/ src /路径直接给的);

注意,Symfony会在ob娱乐下载内部调用PHP语句require_once,这意味着每个请求的文件只包含一次。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
ob娱乐下载Symfony 6.0支持通过SensioLabs