3

我开始研究面向对象的 PHP。迄今为止,我已经开发了大量采用过程方法的 PHP 系统,但我认为是时候向前迈进了。

我目前正在从事的项目之一是 WordPress 的成绩和障碍计算插件。简而言之,该插件从上传的 CSV 文件中获取乒乓球运动员的成绩,并计算出他们的差点比赛评分。

我正在使用 WordPress,因为我的乒乓球俱乐部的网站使用 WP,如果它适用于他们,我可能会将其提供给其他俱乐部/联盟,他们也将能够安装插件并获得成熟的成绩和障碍系统。

在 WordPress 之外,我有理由相信我可以使用 MVC 模式在 OO-PHP 中开发这样一个系统。它可能看起来像这样:

控制器

  1. 创建模型的实例
  2. 处理“导航”,即 GET/POST 请求,并确定相应显示哪些页面模板

模型

  1. 处理文件的上传和存储
  2. 从数据库中更新和选择信息
  3. 计算玩家成绩的主机机制

看法

  1. 管理页面,即设置和上传文件
  2. 成绩页面,显示球员的成绩和差点
  3. 结果页面,特定用户可以在其中查看个别玩家的结果(主要用于调试目的)

如果我错了,请纠正我,因为我在过去 30 分钟左右才学会了这种模式,但按照我的逻辑,这是创建这个系统的真正 MVC 方法。

但是,一旦我将 WordPress 插件纳入等式,我就开始为以下问题而苦恼:

  • 在非 WP 系统中,CSS 样式将简单地包含在 View 的 PHP 页面中,然后我会include在 Controller 中。但是,在 WordPress 中,它不能那样工作——我不能那样使用 CSS 样式,它们必须是enqueue'd. 我将在哪里托管用于排队我的 CSS 文件的功能?
  • 当有人第一次激活插件时,它需要使用 WordPress 函数创建适当的数据库表来执行此操作。这将不得不运行 a hook,即 a register_activation_hook。我将在哪里托管这些功能?将它们放在控制器中似乎是明智的,但同时我想也许控制器需要保持尽可能干净和简单易读。
  • 与上述问题类似,我还需要使用add_menu_pageadd_submenu_page命令创建 WordPress 管理页面。我在哪里托管这些功能?

所有这些问题可能都有相同的答案,而且我知道这只是语义,但我热衷于尝试尽早解决这个问题,这样我才能真正了解面向对象 PHP 的 MVC 模式。

提前致谢,

4

2 回答 2

1

如果你正在寻找一个更好的学习 MVC 的地方,那就是它了。

于 2013-02-27T06:29:40.397 回答
0

希望我做对了。

  1. 无法告诉您有关 CSS 的信息,因为我只是将那些定义在我的布局文件(视图)中。

  2. 重逻辑可以放入服务(外部类),然后在控制器中运行。你会让你的控制器“瘦”

  3. 和上一个类似。您可以将菜单存储为模型(不必严格与 DB 相关,也可以是 XML/JSON/数组数据),然后在控制器中调用您的添加/删除操作。

于 2013-02-27T00:50:51.160 回答