编辑:显然现在删除这个问题为时已晚,这是一个耻辱,因为我不知道为什么在去年五月将页面存储在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放入“views”,因为它是静态数据,样式表/脚本规范与前端管理相关。毕竟,目标是重新粉刷房子只需要webroot访问,或者查看模板访问以进行更广泛的重建。
但是Pages.json不是一个视图。这是一个数据源。
当前“解决方案”: 将文件保留在app / ...的顶层,但我觉得这是一个MVC的失礼。
即使不是,我也不希望我的app文件夹成为数据源的转储基地。
我一直在折腾的潜在解决方案:
将页面存储在数据库表而不是JSON中,并使用PageModel方法从 db_connect.php 调用方法来获取它。但我希望页面能够加载自己的骨架,即使与数据库的连接失败也是如此。此外,即使有缓存,我也不希望在页面加载时发出该数据库请求。
将页面存储在多维PHP数组而不是JSON中...但是我有相同的设计问题,虽然有一个PHP文件,但是我想要在这个前端工作的东西甚至比JSON。随着少量的开销。
在 app / 中添加 data / 作为数据容纳目录...但这也感觉太像是走出设计模式并创建了一个倾倒地。
回到PageModel中分离并行的一维PHP数组,这在理论上可能更有效,但与动态获取页面信息相比,它是丑陋的,冒险的和硬编码的。罗。
当前计划的解决方案:
这听起来像是一个很好的解决方案吗?或者是否存在应该存储数据源的约定?
或这是一个Y问题的X问题,我不应该将这些页面存储为JSON数据?如果是这样,对于数据库表或硬编码的PHP数组,什么是更好的替代方案?
如果有人有建议或答案,请提前感谢您的时间。
答案 0 :(得分:0)
您可以避免将这些值存储在json文件中。
拥有一个加载页面定义的模型,如果您的页面中有2个或模型,则可能会出现问题。此外,您的模型将无法重复使用,因为它与页面相关联。
对于您的页面定义,例如标题,元关键字和内容,您可以专门为此创建1个模型。然后,您的控制器通过调用指定的操作/页面来获取这些数据。例如在索引操作中,您可以调用:pageDefModel-> getMetaTags();.然后您可以将这些结果传递给您的视图。