我已经阅读了很多关于此的 SO 主题,但仍然没有找到(或已经能够创建)正确的答案。
我正在开发一个小型 MVC 框架,我想要一些可以从我的 Controller (但也可能是模型)调用的全局类/对象。
我可以选择几条路线:
- 全局变量
- 静态类/注册表
- 依赖注入(inject)
互联网似乎同意 DI 是最好的选择。我想我已经掌握了这个想法,但还不太舒服。所以我想提供一些背景信息;我可能是唯一一个从事该项目的人,这是一个小项目,我所有的 Controller 都扩展了主 Controller (所以我可以只加载一个类库)。
作为一个具体的例子,我想要一个类别数组。所以我开始将该数组放入 CategoryController 中。但现在我注意到我有点想在我的前 View 和 ProductController 中使用该数组。显然我不想将所有 CategoryController 加载到 ProductController 中。 你也可以说我可以把这个数组放在某种配置或设置文件中,因为这个例子很简单,但这就是为什么它是一个例子。我可能会用更多功能对其进行扩展。
总结一下:在 PHP 中(特别是在 MVC 模型中)如何让您的类(主要是 Controller )访问某种公共(public)类或其他可共享的功能。
最佳答案
您的 Controller 是由“某物”(通常是前端 Controller )创建的。因此,当创建 Controller 时,您可以注入(inject)一个依赖注入(inject)容器。
并且在您的配置/ Bootstrap 中(在创建 Controller 之前),您应该将类别添加到容器中。
这样您就可以从每个 Controller 访问类别。
请注意,这是一个不完全符合依赖注入(inject)精神的简单示例。最好的解决方案是直接注入(inject)类别(而不是注入(inject)容器)。但是,如果您概括该模式(在您的前端 Controller 中处理大量依赖项),这可能会变成很多工作。
一种解决方案是使用可以为您完成此操作的依赖项注入(inject)框架。
例如,我在一个 DI 容器上工作,它可以让你注入(inject)带有注释的东西 ( PHP-DI ),但是还有几个其他的 DI 库,所以你可以选择。
关于php - 可以访问 PHP MVC 框架中的公共(public)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15593255/