如何在Symfony2中将依赖项(服务)正确地注入非服务类?

时间:2012-07-07 19:02:18

标签: php symfony dependency-injection

我已经多次阅读了Symfony2一书中的服务容器章节,并阅读了有关该主题的SO答案和其他资源,但我似乎仍然没有得到它。

到目前为止,我所阅读的所有内容都在我脑海中钻了一个主要的事实:容器本身应该(实际上)永远不会被直接注入依赖者。这似乎可以很好地为其他服务提供依赖,但是如果我的模型中的实体想要检查当前的安全上下文呢?

我知道我可以实现ContainerAwareInterface然后从容器感知上下文中调用setContainer()来获取对此容器本身的访问权限,但这与注入不同服务配置中的容器应该不惜一切代价避免吗?

1 个答案:

答案 0 :(得分:3)

你描述的只是糟糕的设计。您的模型不应该依赖于服务容器。如果您需要执行一些安全检查,那么您将创建一个注入了必要依赖项的服务,然后将模型对象传递给它。

根据您的示例,听起来您正在尝试进行此处http://symfony.com/doc/master/book/validation.html所述的验证,其工作方式与我所述的相同。