我有一个使用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配置将其称为对象的方法。有没有办法告诉它把它称为静态方法?
答案 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