如何在Symfony的YAML配置中调用静态方法?

时间:2014-08-05 12:18:03

标签: php symfony

我有一个使用Symfony组件的应用程序。 当我需要将Symfony的请求对象添加到依赖注入容器时,一切都很顺利。

这是我的配置:

parameters:
  config.project: %project_cfg%
  config.module: %module_cfg%
  config.mysql: %mysql_cfg%
  config.couch: %couch_cfg%
  request: %http_request%

services:
  request:
    class: Symfony\Component\HttpFoundation\Request
    calls:
      - [createFromGlobals]
  db:
    class: App\Core\AlarisDb
    arguments: ["%mysql_cfg%"]
  func:
    class: App\Core\AlarisFunctions
    calls:
      - [setTree, ["@tree"]]
  tree:
    class: App\Core\AlarisTree

一切都很完美,除了请求没有正确创建,因为在PHP中它应该像这样调用:

$request = Request::createFromGlobals();

而YAML配置将其称为对象的方法。有没有办法告诉它把它称为静态方法?

2 个答案:

答案 0 :(得分:4)

我可能错了,但我认为这需要工厂电话而不是“电话”电话,比如..

request:
    class: Symfony\Component\HttpFoundation\Request
    factory_class:  Symfony\Component\HttpFoundation\Request
    factory_method: createFromGlobals

有关工厂的更多信息,请参阅the docs

答案 1 :(得分:1)

我认为"Synthetic Services"正是您所寻找的:

  

合成服务是注入容器的服务   而不是由容器创建。

更多:http://symfony.com/doc/current/components/dependency_injection/advanced.html#synthetic-services