`
sillycat
  • 浏览: 2551194 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Symfony(6)Service Container

    博客分类:
  • PHP
 
阅读更多

Symfony(6)Service Container

A modern PHP application is full of objects. A service container will allow us to standardize and centralize the way objects are constructed in our application.

1. Basic
What is a Service
A Service is a PHP object that created for a specific purpose.

Service Container
A Service Container is simply a PHP object that manages the instantiation of services.

2. How to Configure
Creating/Configuring Services in the Container
#app/config/config.yml
services:
     my_mailer:
          class:    Acme\HelloBundle\Mailer
          arguments: [sendMail]

public function sendEmailAction(){
     $mailer = $this->get(‘my_mailer’); //match the name, get it
}

Service Parameters
#app/config/config.yml
parameters:
     my_mailer.class:     Acme\HelloBundle\Mailer
     my_mailer.transport: sendmail
services:
     my_mailer:
          class:          “%my_mailer.class%”
          arguments:     [“%my_mailer.transport%"]

Importing other Container Configuration Resources
imports:
     - { resource: “@AcmeHelloBundle/Resources/config/services.yml” }
     - { resource: “…snip..."}

Referencing Services
class NewsletterManager{
     protected $mailer;
     public function __construct(Mailer $mailer){
          $this->mailer = $mailer
     }
}

services:
     my_mailer:
          …snip…
     newsleter_manager:
          class: …snip…
          arguments: [“@my_mailer"]

Optional Dependencies: Setter Injection
Optional dependencies for a class.
class NewsletterManager{
     protected $mailer;
     public function setMailer(Mailer $mailer){
          $this->mailer = $mailer;
     }
}

services:
     my_mailer:
          ..snip…
     newsletter_manager:
          class:     …snip…
          calls:
               - [setMailer, [“@my_mailer"]]

Injecting the Request
class NewsletterManager{
     protected $requestStack;
     
     public function __construct(RequestStack $requestStack){
          $this->requestStack = $requestStack;
     }
     
     public function anyMethod(){
          $request = $this->requestStack->getCurrentRequest();
          ..snip...
     }
}

services:
     newsletter_manager:
          class: …snip…
          arguments: [“@request_stack”]

Making References Optional
services:
     newsletter_manager:
          class:      …snip…
          arguments: [“@?my_mailer"]

public function __construct(Mailer $mailer = null){ …snip… }

Array of Arguments
services:
     newsletter_manager:
          class: …snip…
          arguments: [“@mailer”, “@templating”]

Tags
services:
     foo.twig.extension:
          class:      …snip…
          tags:
               - { name: twig.extension }

3. Run and Debugging
>php app/console container:debug

Check one service
>php app/console container:debug request_stack
[container] Information for service request_stackService Id      request_stack Class            Symfony\Component\HttpFoundation\RequestStack Tags            - Scope            container Public          yes Synthetic        no Required File    -


References:
http://symfony.com/doc/2.4/book/service_container.html

http://twpug.net/docs/symblog/
http://symfony.com/blog/

http://getbootstrap.com/getting-started/#examples



分享到:
评论

相关推荐

    Symfony_metabook_2.0

    11. **服务容器(Service Container)**:Symfony的服务容器是一个高级功能,允许开发者管理应用程序中各种服务的生命周期。这部分文档讲解了如何在Symfony中注册和使用服务容器。 12. **性能(Performance)**:...

    symfony2.7源码包

    7. **服务容器(Service Container)**: 服务容器是 Symfony 的核心组件,负责管理和实例化应用程序中的所有服务。它使得服务的依赖关系可以通过配置文件来管理,而不是硬编码在代码中。 8. **事件系统(Event ...

    service-container:一个 Symfony2 风格的 Node.js 依赖注入库

    服务容器一个 Symfony2 风格的 Node.js 依赖注入... Symfony 2 Guide Book 提供了很好的安装 npm install service-container或者添加到您的 package.json 依赖项。用法使用服务容器有两个部分,容器本身和services.json

    symfony学习资料

    7. **服务(Service Container)**: Symfony的服务容器是管理应用中所有服务的地方,包括自定义服务和内置服务。理解服务的生命周期、注入依赖和如何定义服务是关键。 8. **表单(Form Handling)**: Symfony的表单组件...

    PsyshBundle:使用PsySH的Symfony的命令行REPL捆绑包

    Symfony ServiceContainer的实例 $kernel Symfony内核实例 $parameters Symfony参数实例 除此之外,它是普通的旧 ! 您也进行以添加自己的变量。 文献资料 安装 您可以使用将捆绑软件安装到您的项目中: ...

    blog:周一总理项目Symfony!

    此外,Symfony的Service Container是实现依赖注入的核心工具,它可以管理并提供整个应用中的服务。 对于数据库操作,Symfony通常结合 Doctrine ORM(对象关系映射)进行。Doctrine ORM允许开发者使用面向对象的方式...

    symfony_emp_title:面试任务

    此外,Symfony提供了一套强大的服务容器(Service Container),允许你管理、依赖注入和共享应用中的服务。理解服务容器的工作原理以及如何定义和使用自定义服务是提高代码复用性和可维护性的关键。 最后,面试任务...

    symfony-cqrs-template

    7. **服务容器配置(Service Container Configuration)**:定义了框架如何管理依赖注入,确保正确组装各个组件。 8. **测试(Tests)**:包含单元测试和集成测试,确保代码质量并验证架构组件的正确工作。 9. **...

    symfony-tutor:symfony 导师

    2. **Service Container**: 服务容器是 Symfony 的核心功能之一,用于管理应用中的依赖关系。它允许开发者声明服务并控制它们的生命周期,使得依赖注入变得简单。 3. **Twig**: Symfony 默认集成的模板引擎,用于...

    symfony-must-watch::movie_camera:关于Symfony的必看视频

    - **服务容器(Service Container)**:Symfony 的服务容器是框架的中心,负责管理所有应用的服务。它可以根据配置自动创建和注入依赖,使代码更易于管理和解耦。 - **控制器(Controllers)**:在 Symfony 中,...

    symfony学习

    3. **服务容器 (Service Container)**:服务容器是 Symfony 的核心,它负责管理应用的所有组件,确保依赖注入和解耦,使得代码更加易于测试和维护。 4. **模板引擎 (Twig)**:Symfony 默认使用 Twig 作为模板引擎,...

    symfony4-embedsocial-project

    7. **服务容器(Service Container)**:Symfony的核心组件之一,它管理所有应用的服务并确保依赖关系得到满足。 8. **数据库集成**:如果项目涉及存储数据,可能会使用Doctrine ORM来处理数据库操作,与PDO或其他...

    symfony-bundle-installer

    3. **服务容器(Service Container)**:Symfony 的核心组件,负责管理和实例化应用程序中的服务。服务可以是任何可重用的代码块,如数据库连接、邮件发送器等。服务容器使得依赖注入变得简单,有助于实现松耦合和可...

    图书5.0-5:Symfony 5图书来源:快速通道

    2. **服务容器(Service Container)**:作为核心组件,服务容器管理应用的所有服务,确保依赖注入和解耦。 3. **模板引擎(Templating)**:Twig是Symfony推荐的模板引擎,它提供了丰富的功能,如变量、控制流、...

    Symfony2函数用法实例分析

    在Symfony2框架中,服务容器(Service Container)是一个核心概念,用于管理应用中的对象依赖关系。通过服务容器,开发者可以获取由容器管理的任何对象实例。例如,文章中的代码片段展示了如何使用$this->container-...

    tests_with_symfony

    7. **Service测试**:Symfony的服务容器使得测试依赖注入变得简单。可以使用`ContainerInterface`的`get`方法获取服务实例,然后对其进行测试。 8. ** Doctrine测试**:如果你的应用使用了Doctrine ORM,Symfony...

    blog-symfony:与如何使用Symfony 4创建博客的系列文章相关的文件

    Service Container,用于管理应用的所有服务;路由器,负责处理HTTP请求并调度到相应的控制器;以及 Twig,一个强大的模板引擎,用于渲染视图。在创建博客的过程中,我们将利用这些核心组件来构建我们的应用。 在...

    Acclimate一个依赖注入容器和服务定位的通用接口

    use Acclimate\Container\Adapter\Symfony\ContainerAdapter; // 例如,使用Symfony DIC $adapter = new ContainerAdapter($symfonyContainer); // 替换$symfonyContainer为你的Symfony DIC实例 $container = ...

    foro-symfony

    2. **服务容器(Service Container)**:Symfony的服务容器是其核心组件之一,它负责管理整个应用的所有服务,包括数据库连接、邮件发送器等,确保依赖注入并促进代码解耦。 3. **模板引擎(Twig)**:Symfony通常...

    20、继续修改集成测试代码1

    通过 `symfony console debug:container` 命令,我们可以查询到 PostRepository 服务的 ID,即类名本身。即使 PostRepository 没有被设置为公共服务,我们仍能通过容器获取到它,这是因为 Doctrine 在编译容器时,...

Global site tag (gtag.js) - Google Analytics