symfony2 服务容器(Service Container)
2016-02-05 14:07
411 查看
1.什么是Service Container?Service Container服务容器(或依赖注入容器)是一个简单的PHP对象管理服务实例(即对象)。例如,假设你有一个简单的PHP类,提供电子邮件。没有服务容器,您必须手动创建对象,只要您需要它:4.导入其他Container配置(使用
use Acme\HelloBundle\Mailer; $mailer = new Mailer('sendmail'); $mailer->send('ryan@example.com', ...);
但如果你想在其他地方使用邮件服务吗?你肯定不想重复的邮件配置每次你需要使用邮件对象。如果你需要改变运输从Sendmail SMTP的应用无处不在?你需要追踪每个地方你创建一个邮件服务和改变它。
2.这时候需要这么做
现在这个对象可以在symfony中的任意控制器中,通过get()方法访问容器的服务在Container中创建/配置Service,最好的答案是让服务容器中创建你的邮件对象。为了这项工作,你必须教容器如何创建邮件服务。这是通过配置,可以指定在YAML。
# app/config/config.yml services: my_mailer: class: Acme\HelloBundle\Mailer arguments: [sendmail]
class HelloController extends Controller { public function sendEmailAction() { $mailer = $this->get('my_mailer'); $mailer->send('ryan@foobar.net', ...); } }当你使用服务的时候。容器构造对象并返回它。这是使用该服务容器的另一个主要优点。也就是说,一个服务是从来没有构建,直到它的需要。如果你定义了一个服务,而不使用它的请求,服务就永远不会被创建。这节省了内存,提高了应用程序的速度。这也意味着,很少有或没有表现为定义大量的服务的性能。从未使用过的服务从未构建。
3.Service的参数
通过容器创建新的服务(即对象)是非常简单的。参数使定义服务更加有组织性和灵活性:
# app/config/config.yml parameters: my_mailer.transport: sendmail services: my_mailer: class: Acme\HelloBundle\Mailer arguments: ["%my_mailer.transport%"]
4.导入其他Container配置(使用 imports
导入)
@1第一步
# src/Acme/HelloBundle/Resources/config/services.yml parameters: my_mailer.transport: sendmail services: my_mailer: class: Acme\HelloBundle\Mailer arguments: ["%my_mailer.transport%"]@第二步
# app/config/config.yml imports: - { resource: "@AcmeHelloBundle/Resources/config/services.yml" }
相关文章推荐
- AIM Tech Round (Div. 2) C. Graph and String 二分图染色
- AIM Tech Round (Div. 2) B. Making a String 贪心
- AIM Tech Round (Div. 2)(B)模拟
- AIM Tech Round (Div. 2) A. Save Luke 水题
- AIM Tech Round (Div. 2)(A)数学
- AIM Tech Round (Div. 2)-B. Making a String(贪心)
- AIM Tech Round (Div. 2)-A. Save Luke(数学题)
- 人工智能、应用、程序
- 【slighttpd】基于lighttpd架构的Server项目实战(5)—TCP的TIME_WAIT状态
- ubuntu sendmail
- AIM Tech Round (Div. 2)
- Codeforces AIM Tech Round (Div. 2) B. Making a String
- Codeforces AIM Tech Round (Div. 2) A. Save Luke
- 行链接(Row chaining) 与行迁移(Row Migration)
- zabbix监控 不同版本安装和raid监控,mysql主从监控
- 论文《FDDB: A Benchmark for Face Detection in Unconstrained Settings》导读
- My GoogleMail c9
- AIM Tech Round (Div. 2)--A. Save Luke
- AIM Tech Round (Div. 2)--B. Making a String
- AIM Tech Round (Div. 2) C. Graph and String(二分图染色 | 贪心)