是否有一种很好的方法可以将传递给控制器​​的参数(依赖项)数量保持下来?

时间:2014-03-14 19:31:05

标签: php dependency-injection controller silex

所以在Silex中,我试图从控制器操作中获取$ app参数,并传递与控制器/操作相关的依赖项。

通常我的控制器都有这些共享依赖项:

  • 模板引擎
  • 会话提供商
  • 翻译提供商
  • 网址生成器
  • 验证提供程序

默认情况下,我有一个基本的Controller类来接受构造函数。从它继承的控制器也最终也会获取这些参数。此外,它们还采用其他参数,例如对象存储库/存储(例如身份验证或用户控制器中的用户存储库)。

我最终在Silex中使用至少 5参数向构造函数注册控制器,因为我似乎在其他应用程序中没有看到很多这样的参数。感觉就像我做错了。

我也意识到我正在抱怨Pimple DI容器“修复”同样的事情,但使用它似乎也不太符合DI哲学。

我的问题:有没有更好的方法来做我正在做的事情?

1 个答案:

答案 0 :(得分:1)

是的,有其他解决方案。

  • 第一个是" group"您的参数分为新的类,如ControllerUtil或类似的东西。但这并不总是容易或可能的,所以我并不是特别喜欢它。

Benjamin Eberlei在这篇博文中解释了这种方法:Extending Symfony2: Controller Utilities

  • 第二种是使用构造函数注入的替代方法,如属性或setter注入。这不像构造函数注入那样干净,但非常实用。

鉴于控制器通常不是您想要重新注入,重用或单元测试的组件,因此这是一个可接受的妥协IMO。我已经使用这种方法大约一年了,我无法回去。

以下是我就该主题撰写的相关博文:Controllers as services?

相关问题