2

我正在编写一个使用模块化结构的 PHP 应用程序。模块基本上是文件夹名称,这些文件夹包含 PHP 文件。

它看起来像这样:

/modules
   /module1
   /module2
   /module3

我的 PHP 应用程序读取文件夹的内容并将modules文件夹名称保存到我数据库中的表中。我的modules表如下所示:

id | module  | active | order
1  | module1 | 1      | 2
2  | module2 | 0      | 1
3  | module3 | 1      | 3

modules读取文件夹并将文件夹名称保存到数据库后,我再次从表中获取行。这样我就可以很容易地看到哪些模块处于活动状态,以及我必须以什么顺序显示它们。

这种方法的问题是每次访问页面时我都必须执行上述所有操作。因为系统不知道何时从文件夹module中添加或删除了a。module因此,通过“读取文件夹/将其保存到数据库/并再次读取数据库”似乎可以提供大多数最新版本。但我可以想象这种方法效率低下。我认为这可以做得更好。


我想出了一个解决方案。但我仍然不认为这是最好的解决方案。

解决方案 1

当用户访问该站点时,请执行上述所有操作。读取modules文件夹,将文件夹名称保存到表中(先清除表后),然后从表中获取行并将其存储在session. 当用户浏览网站时,我可以简单地遍历session.

缺点:删除/添加的模块仅在浏览器关闭并重新打开时可见。

改进?

我敢肯定有一种更优雅的方式来做到这一点。有人有什么想法吗?

4

1 回答 1

3

流程应该如下:

  1. 管理员请求模块列表
  2. 脚本扫描知名目录并构建可用模块列表
  3. 该脚本从数据库中读取活动模块的加载顺序
  4. 相同的脚本显示一个列表,让管理员有机会激活模块并定义顺序
  5. 最后一段代码将更改提交到数据库(如果有)

当普通用户请求页面时

  1. 模块子系统从数据库中读取模块名称和顺序
  2. 模块系统根据存储在 db 中的名称,按照 db 中定义的顺序从众所周知的目录加载模块

我认为这是最有效的方法。

免责声明:恕我直言,这是浪费时间。你最好学习一个真正的框架,可能是像 CakePHP 这样的 MVC,或者像 Drupal、Joomla 或 Wordpress 这样的广泛使用的 CMS。这样,您将拥有 1.工作系统 2.安全系统 3. 可重复使用的知识。即使出于学习目的,也无需重新发明轮子。你最终会通过从他人的成功(和失败)中学习来加快这个过程。

于 2012-09-15T20:30:25.997 回答