MVC 的目录结构

新手上路,请多包涵

我正在尝试清理我一直在研究的框架。目前,该站点由以下目录组成:

 Models
Views
Controllers
Helpers (Miscellaneous functions)
Libraries (Universal classes, like library and session management)
Images
Style

每次调用页面时,路由器脚本都会查找关联的控制器,因此 thesite.com/login 会在 ‘/controllers/login.php’ 实例化 Login_Controller 我面临的问题是,路由器脚本本身感觉就像一个类型控制器,就像 view.php 一样,它处理由适当视图处理的格式化数据。但它们并不完全像页面控制器,因为它们控制 MVC 本身。我对这个架构还是有些陌生,我很好奇有更多经验的人会如何组织这个。

我可以将路由器和视图控制器分类为库,还是在 /controllers 中创建一个名为“pages”的子目录或任何其他想法会更好?非常感谢。

原文由 dlwiest 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 505
2 个回答

我建议遵循 Symfony 1.x 目录结构。清晰、合乎逻辑、安全。

摘自 Fabien Potencier 和 François Zaninotto 合着 的《Symfony 权威指南》 一书:

 apps/
  frontend/
  backend/
cache/
config/
data/
  sql/
doc/
lib/
  model/
log/
plugins/
test/
  bootstrap/
  unit/
  functional/
web/
  css/
  images/
  js/
  uploads/
  • apps/ 包含一个目录,用于项目的每个应用程序(通常是前台和后台的 frontend 和 backend)。
  • cache/ 包含配置的缓存版本,以及(如果激活它)项目的操作和模板的缓存版本。缓存机制(详见第 12 章)使用这些文件来加速对 Web 请求的响应。每个应用程序在这里都有一个子目录,包含预处理的 PHP 和 HTML 文件。
  • config/ 保存项目的一般配置。
  • data/ 在这里,您可以存储项目的数据文件,如数据库模式、创建表的 SQL 文件,甚至是 SQLite 数据库文件。
  • doc/ 存放项目文档,包括自己的文档和PHPdoc生成的文档。
  • lib/ 专用于外部类或库。在这里,您可以添加需要在您的应用程序之间共享的代码。 model/ 子目录存储项目的对象模型(在第 8 章中描述)。
  • log/ 存储由 symfony 直接生成的适用日志文件。它还可以包含 Web 服务器日志文件、数据库日志文件或来自项目任何部分的日志文件。 Symfony 为每个应用程序和每个环境创建一个日志文件(日志文件在第 16 章中讨论)。
  • plugins/ 存储应用程序中安装的插件(插件在第 17 章中讨论)。
  • test/ 包含用 PHP 编写并与 symfony 测试框架兼容的单元和功能测试(在第 15 章中讨论)。在项目设置期间,symfony 会自动添加一些带有一些基本测试的存根。
  • web/ Web 服务器的根目录。唯一可从 Internet 访问的文件是位于此目录中的文件。

原文由 Maxime Pacary 发布,翻译遵循 CC BY-SA 4.0 许可协议

我会建议你研究框架的目录结构,比如 symfony2 或 yii

这是我为我选择的:

 public_html/              (for public files) (should be public, place only index.php in here)
public_html/css/
public_html/images
public_html/js            (for your js files, or custom generated ones)
lib/                      (for my libs)  (should be private)
lib/vendor/               (for 3rd party libs)
application/              (for the whole app) (should be private)
application/class         (classes that make the app work such as mainApp, Controller, Model, View, etc...)
application/class/model   (all the models)
application/class/view    (all the views)
application/class/view/html (templates used by the views)
application/class/controller (all controllers)
application/class/helper  (helper functions)
application/class/lib     (libs that you develop for the application)
application/template      (layout and/or templates for the application)
application/conf          (config files)
application/log           (log files)
application/cron          (scheduled jobs)
application/database      (for database migration scripts)
...

您还可以使用文件命名约定,例如:YourClassName.class.php 用于类,YourView.phtml 用于您的视图等。检查一个框架,您将学习如何很好地构建和应用程序。

原文由 Packet Tracer 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏