Php 如何在Symfony';什么是YAML配置?
我有一个使用Symfony组件的应用程序。 一切都很顺利,直到当我需要将Symfony的请求对象添加到依赖项注入容器时遇到了麻烦 这是我的配置:Php 如何在Symfony';什么是YAML配置?,php,symfony,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:
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 config将其作为对象的方法调用。有没有办法告诉它以静态方法调用它?我可能错了,但我认为这需要一个工厂调用,而不是一个“调用”调用,比如
request:
class: Symfony\Component\HttpFoundation\Request
factory_class: Symfony\Component\HttpFoundation\Request
factory_method: createFromGlobals
有关工厂的更多信息,请参见。我认为“合成服务”
是您需要的:
合成服务是注入容器中的服务
而不是由容器创建
更多信息:不要实例化第二个请求实例!都不将请求对象作为服务参数传递(您的服务将在请求范围内)。如果你需要请求对象,让你的服务订阅事件谁说他正在运行
HttpKernel
组件?@Qoop没错,我读这个问题的速度太快了,我马上就认为他在运行整个框架。是的,这就是通过静态方法创建服务的方法。但是,你应该提到,为请求这样做是错误的。如果我知道这是错误的,我会这么做的。请随意在评论中贴一些关于它的信息,我会更新我的“答案”。创建请求对象并不一定是错误的。是的,使用工厂是配置它的方法。