【问题标题】:Is there a good way to keep the number of parameters (dependencies) passed to a controller down?有没有一种好方法可以减少传递给控制器​​的参数(依赖项)的数量?
【发布时间】:2014-04-20 06:47:36
【问题描述】:

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

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

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

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

我最终在 Silex 中注册了具有至少 5 个参数的控制器到构造函数,而我在其他应用程序中似乎看不到很多这样的参数。感觉我做错了。

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

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

【问题讨论】:

标签: php dependency-injection controller silex


【解决方案1】:

是的,还有其他解决方案。

  • 第一个是将参数“分组”到新的类中,例如ControllerUtil 或类似的东西。不过,这并不总是容易或可能的,所以我并不是特别喜欢这样做。

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

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

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

这是我写的关于该主题的相关博文:Controllers as services?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2014-09-19
    相关资源
    最近更新 更多