【发布时间】:2017-03-26 17:43:44
【问题描述】:
编辑:显然删除这个问题为时已晚,这很遗憾,因为我不知道为什么去年五月将页面存储在 JSON 文件中似乎是一个合理的想法。
让框架处理页面路由而不是重新发明*会很好,但我试图更好地理解这种设计模式的实际实现。我也知道a pure implementation of MVC may not always be possible for web applications,但所有这些都是服务器端的。
这是我当前的结构(减去不相关的文件):
app/
controllers/
PageController.php
models/
PageModel.php
views/
GlobalFooter.php
GlobalHeader.php
Pages.json
config/
db_connect.php
/docs
/lib
/web
/js
/img
/css
index.php
当用户加载页面时,页面会实例化一个控制器,该控制器将 $_GET 参数传递给页面模型。
模型将 Pages.JSON 文件作为关联数组加载并检索特定页面数据:
title
controller
page-specific stylesheet names
page-specific script names
which membergroups can access it
etc.
除了提取允许该用户访问的页面的动态列表之外,还可以进行导航。然后控制器调用具有适当内容的适当视图。
到目前为止: 最初我打算将 Pages.json 与“视图”放在一起,因为它是静态数据,并且样式表/脚本规范与前端管理相关。毕竟,目标是重新粉刷房子只需要 webroot 访问权限,或者查看模板访问权限以进行更广泛的改造。
但 Pages.json 不是视图。它是一个数据源。
当前的“解决方案”: 将文件留在 app/... 的顶层,但我觉得这是 MVC 失礼。
即使不是,我也不希望我的应用文件夹成为数据源的垃圾场。
我一直在折腾的潜在解决方案:
将页面存储在数据库表中而不是 JSON 中,并让 PageModel 方法调用 db_connect.php 中的方法来获取它。但我希望页面能够加载自己的骨架,即使与数据库的连接失败。此外,即使使用缓存,我也不想在页面加载时发出该数据库请求。
将页面存储在多维 PHP 数组中而不是 JSON 中...但是我遇到了同样的设计问题,尽管使用的是 PHP 文件,但我希望在前端工作的内容甚至少于JSON。以及更多的开销。
将 data/ 添加为 app/ 中的数据存放目录...但这也太像跳出设计模式并创建一个垃圾场。
回到 PageModel 中分离并行的一维 PHP 数组,理论上这可能更有效,但与动态获取页面信息相比,它是丑陋的、有风险的和硬编码的。不。
当前计划的解决方案:
- 将前端 JSON 数据(样式表等)与 后端(控制器等)分成两个 JSON 文件。
- 从现在开始将前端数据源存储在视图中。
- 从现在开始将后端存储在模型/中。
这听起来像是一个好的解决方案吗?或者是否已经有关于数据源应该存储在哪里的约定?
或者这是一个 Y 问题的 X 问题,我根本不应该将页面存储为 JSON 数据?如果是这样,数据库表或硬编码的 PHP 数组有什么更好的替代方案?
如果有人有建议或答案,请提前感谢您的宝贵时间。
【问题讨论】:
标签: php json model-view-controller model