php - 可以访问 PHP MVC 框架中的公共(public)类

标签 php class model-view-controller dependency-injection

我已经阅读了很多关于此的 SO 主题,但仍然没有找到(或已经能够创建)正确的答案。

我正在开发一个小型 MVC 框架,我想要一些可以从我的 Controller (但也可能是模型)调用的全局类/对象。

我可以选择几条路线:

  1. 全局变量
  2. 静态类/注册表
  3. 依赖注入(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/

相关文章:

PHP - 如何保持命令 shell 打开以执行多个命令?

c++ - 我应该使用仅 header 类还是 lib 文件?

c++ - 分配给类中函数指针的函数

ios - 什么应该在 View Controller 中,什么应该在 View 中?

javascript - 多日期选择器 : Disable dates from a list

php - 如何测试使用字符串正文发送的 Laravel 邮件,而不是使用 Mailable

javascript - 如何在 PHP 中获取从 AJAX POST 发送的数据?

php - 如何在未选择 WHERE 值的 php 中运行查询?

java - 关于StyledDocument和JTextPane的关系以及接口(interface)的正确使用问题

android - Android 中 MVP 相对于 MVVM 设计模式的缺点