依赖注入组件

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.0,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

依赖注入组件

依赖注入组件允许您标准化和集中在应用程序中对象的构造方式。

介绍依赖注入和服务容器服务容器

安装

你可以在许多不同的方式:安装组件

基本用法

你可能有一个简单的类如下梅勒您想要提供服务:

1 2 3 4 5 6 7 8 9 10 11
梅勒{私人美元运输;公共函数__construct(){美元- >运输=“发送邮件”;}/ /……}

你可以注册这个容器的服务:

1 2 3 4
使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;美元容器=ContainerBuilder ();美元容器- >注册(“梅勒”,“梅勒”);

类的改进,使其更加灵活是允许容器设置运输使用。如果你改变这是传递给构造函数的类:

1 2 3 4 5 6 7 8 9 10 11
梅勒{私人美元运输;公共函数__construct(美元运输){美元- >运输=美元运输;}/ /……}

然后你可以设置集装箱运输的选择:

1 2 3 4 5 6
使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;美元容器=ContainerBuilder ();美元容器- >注册(“梅勒”,“梅勒”)- >addArgument (“发送邮件”);

这门课是现在更加灵活分隔的选择运输的实现和容器。

所选邮件传输可能是其他服务需要了解的东西。你可以不用改变它在多个地方,使容器中的一个参数,然后指这个参数梅勒服务的构造函数参数:

1 2 3 4 5 6 7
使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;美元容器=ContainerBuilder ();美元容器- >setParameter (“mailer.transport”,“发送邮件”);美元容器- >注册(“梅勒”,“梅勒”)- >addArgument (“% mailer.transport %”);

现在梅勒服务容器中可以注入的依赖其他的类。如果你有一个欧宝平台是合法的吗NewsletterManager类是这样的:

1 2 3 4 5 6 7 8 9 10 11
欧宝平台是合法的吗NewsletterManager{私人美元梅勒;公共函数__construct(\梅勒美元梅勒){美元- >梅勒=美元梅勒;}/ /……}

你可以注册这个服务,通过梅勒服务:

1 2 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;使用ob娱乐下载\组件\DependencyInjection\参考;美元容器=ContainerBuilder ();美元容器- >setParameter (“mailer.transport”,“发送邮件”);美元容器- >注册(“梅勒”,“梅勒”)- >addArgument (“% mailer.transport %”);美元容器- >注册(“欧宝平台是合法的吗newsletter_manager”,“欧宝平台是合法的吗NewsletterManager”)- >addArgument (引用(“梅勒”));

如果欧宝平台是合法的吗NewsletterManager不需要的梅勒和注射只有几个选项,那么您可以使用setter注入:

1 2 3 4 5 6 7 8 9 10 11
欧宝平台是合法的吗NewsletterManager{私人美元梅勒;公共函数setMailer(\梅勒美元梅勒){美元- >梅勒=美元梅勒;}/ /……}

现在,您可以选择不注入梅勒欧宝平台是合法的吗NewsletterManager。如果你想虽然容器可以调用setter方法:

1 2 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;使用ob娱乐下载\组件\DependencyInjection\参考;美元容器=ContainerBuilder ();美元容器- >setParameter (“mailer.transport”,“发送邮件”);美元容器- >注册(“梅勒”,“梅勒”)- >addArgument (“% mailer.transport %”);美元容器- >注册(“欧宝平台是合法的吗newsletter_manager”,“欧宝平台是合法的吗NewsletterManager”)- >addMethodCall (“setMailer”,数组(引用(“梅勒”)));

你可以得到你欧宝平台是合法的吗newsletter_manager服务从容器中是这样的:

1 2 3 4 5 6 7
使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;美元容器=ContainerBuilder ();/ /……美元欧宝平台是合法的吗newsletterManager=美元容器- >get (“欧宝平台是合法的吗newsletter_manager”);

避免您的代码变得依赖于容器

当你可以直接从容器中检索服务最好最小化。例如,在欧宝平台是合法的吗NewsletterManager你注射梅勒服务,而不是要求的容器。你可以注射和检索的容器梅勒服务,但是它将被绑定到这个容器很难重用类。

你需要得到容器的服务在某种程度上,但这应该是尽可能少的时间在您的应用程序的入口点。

设置容器的配置文件

以及设置上面的服务使用PHP还可以使用配置文件。这允许您使用XML或Yaml编写服务而不是使用PHP的定义来定义服务在上面的例子。除了最小的应用程序有意义组织服务定义通过移动到一个或多个配置文件。要做到这一点,你还需要安装配置组件

加载XML配置文件:

1 2 3 4 5 6 7
使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;使用ob娱乐下载\组件\配置\FileLocator;使用ob娱乐下载\组件\DependencyInjection\加载程序\XmlFileLoader;美元容器=ContainerBuilder ();美元加载程序=XmlFileLoader (美元容器,FileLocator (__DIR__));美元加载程序- >负载(“xml”);

加载YAML配置文件:

1 2 3 4 5 6 7
使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;使用ob娱乐下载\组件\配置\FileLocator;使用ob娱乐下载\组件\DependencyInjection\加载程序\YamlFileLoader;美元容器=ContainerBuilder ();美元加载程序=YamlFileLoader (美元容器,FileLocator (__DIR__));美元加载程序- >负载(“services.yml”);

请注意

如果你想YAML加载配置文件,那么您还需要安装YAML组件

如果你想要使用PHP创建服务然后你可以移动到一个单独的配置文件和加载它以类似的方式:

1 2 3 4 5 6 7
使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;使用ob娱乐下载\组件\配置\FileLocator;使用ob娱乐下载\组件\DependencyInjection\加载程序\PhpFileLoader;美元容器=ContainerBuilder ();美元加载程序=PhpFileLoader (美元容器,FileLocator (__DIR__));美元加载程序- >负载(“services.php”);

现在可以设置欧宝平台是合法的吗newsletter_manager梅勒服务使用配置文件:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12
参数:#……mailer.transport:sendmail服务:梅勒:类:梅勒参数:[" % mailer.transport % "]欧宝平台是合法的吗newsletter_manager:类:欧宝平台是合法的吗NewsletterManager电话:- - - - - -[setMailer,[" @mailer "]]
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。