Php 在Symfony2中将自定义初始化代码放在何处?

Php 在Symfony2中将自定义初始化代码放在何处?,php,symfony,dependency-injection,Php,Symfony,Dependency Injection,假设我有两项服务: get('my_first_service') get('my_second_service') 我想这样做: $this->get('my_first_service')->doSomething($this->get('my_second_service')); 这是一些初始化代码,必须在项目中的任何地方都处于活动状态。就我所见,我有几个选项(这两个服务都来自供应商目录(我自己没有编写它们)): 在app.php和/或app_dev.php中添加上述

假设我有两项服务:

get('my_first_service')
get('my_second_service')
我想这样做:

$this->get('my_first_service')->doSomething($this->get('my_second_service'));
这是一些初始化代码,必须在项目中的任何地方都处于活动状态。就我所见,我有几个选项(这两个服务都来自供应商目录(我自己没有编写它们)):

  • 在app.php和/或app_dev.php中添加上述代码(经过一些修改)
  • 将上述代码添加到每个控制器操作中
  • 使用服务作为参数创建服务,并在构造函数中添加上述代码
  • 第一个选项似乎有点“不寻常”,因为我没有链接编辑app.php文件来链接这个链接。第二个选项效率太低,因为我需要对几十个操作执行此操作。第三个操作似乎更好,但我仍然需要从某处调用此服务,以便执行构造函数,对吗


    我觉得我错过了一个可能性。。。对于这种初始化代码,一定有更好的地方,对吧?

    看起来非常类似。您可以将doSomething添加为调用,并将my_second_服务作为参数。这样,当您获得第一个_服务时,该方法将被自动调用,并传入正确的参数,从而使您免于一次丑陋的黑客攻击

    我假设您已经在配置中定义了服务

    例如在YAML中:

    services:
       my_second_service:
           # ...
       my_first_service:
           class: MyFirstServiceClassName
           calls:
               - [ doSomething, [ @my_second_service ] ]
    

    如果doSomething返回一个您需要使用的不同对象,那么它听起来像一个工厂,您也可以对其进行配置。通读。

    看起来很像。您可以将doSomething添加为调用,并将my_second_服务作为参数。这样,当您获得第一个_服务时,该方法将被自动调用,并传入正确的参数,从而使您免于一次丑陋的黑客攻击

    我假设您已经在配置中定义了服务

    例如在YAML中:

    services:
       my_second_service:
           # ...
       my_first_service:
           class: MyFirstServiceClassName
           calls:
               - [ doSomething, [ @my_second_service ] ]
    

    如果doSomething返回一个您需要使用的不同对象,那么它听起来像一个工厂,您也可以对其进行配置。通读。

    如果您确实想在每个操作之前执行代码,您可以侦听事件kernel.controller

    在厨房登记


    您的侦听器是一个服务,因此您可以在需要时注入这两个服务。

    如果您确实想在每个操作之前执行代码,您可以侦听event kernel.controller

    在厨房登记


    您的侦听器是一个服务,因此您可以在需要时注入两个服务。

    如果
    我的第一个服务
    依赖于
    我的第二个服务
    ,那么您应该将第一个服务配置为注入第二个服务,通过DIC提供的任何必要注入方法。如果问题是为每个请求自动创建实例,请将其标记为。如果
    my_first_service
    依赖于
    my_second_service
    ,则应将第一个服务配置为注入第二个服务,通过DIC提供的任何必要的注入方法。如果问题是为每个请求自动创建实例,请将其标记为。感谢您的回复。这些服务已经定义,因为它们是通过composer安装的两个第三方库的一部分。上面的代码定义了新的服务,但我真正想要的只是现有服务中的setter注入。我也可以通过services.yml来做这件事吗?是的,在这种情况下,上面的答案看起来更好。谢谢你的回复。这些服务已经定义,因为它们是通过composer安装的两个第三方库的一部分。上面的代码定义了新的服务,但我真正想要的只是现有服务中的setter注入。我也可以通过services.yml这样做吗?是的,在这种情况下,上面的答案看起来更好