Model view controller MVC的目录结构

Model view controller MVC的目录结构,model-view-controller,architecture,php,Model View Controller,Architecture,Php,我正在努力清理我一直在工作的框架。目前,该网站由以下目录组成: Models Views Controllers Helpers (Miscellaneous functions) Libraries (Universal classes, like library and session management) Images Style 每当调用一个页面时,路由器脚本都会查找相关的控制器,因此site.com/login会在“/controllers/login.php”处实例化login\

我正在努力清理我一直在工作的框架。目前,该网站由以下目录组成:

Models
Views
Controllers
Helpers (Miscellaneous functions)
Libraries (Universal classes, like library and session management)
Images
Style
每当调用一个页面时,路由器脚本都会查找相关的控制器,因此site.com/login会在“/controllers/login.php”处实例化login\u controller。我面临的问题是,路由器脚本本身感觉像是一种控制器,view.php也一样,它处理要由适当视图处理的格式化数据。但是这些并不完全像页面控制器,因为它们控制MVC本身。我对这个架构还是有点陌生,我很好奇有更多经验的人会如何组织这个架构


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

我不会称自己为专家,但一个解决方案是将您的“框架”从实现中移开。我的意思是将“router”、“view.php”和其他框架类移动到某个外部位置,然后将其包含在index.php或任何作为访问点的文件中

然后,只有内容将位于实际的应用程序目录中,而所有框架文件将位于无法通过web服务器访问的位置


只是一个想法:)

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

摘自法比恩·普洛蒂埃和弗朗索瓦·扎尼诺托的书:

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

我建议您研究框架的目录结构,例如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用于视图,等等。检查框架,您将学习如何很好地构造应用程序和应用程序。

我非常喜欢

通常,您上面列出的文件夹位于一个名为“app”的文件夹中,实际运行框架的代码将存储在它自己的名为“core”的文件夹中。您可能还希望将其中的大部分移出公共目录,并使用包含路径来获取文件。由于Style and Images文件夹的原因,我假设它当前在一个公共目录中。因此,我会在站点根目录中有model、view、controller目录,然后是/application/controller for router.php和view.php?只是想知道什么是标准,如果有的话。谢谢你,这很有帮助。我假设view.php将进入/view,然后所有其他模板文件将进入/view/html,但是您建议将router.php放在哪里?它几乎是系统其余部分的入口点。对于我使用/index.php的路由器,它是引导程序,在它内部我使用一个脱离mainApp类的实例,管理任何“全局操作”(路由、缓存、控制器调用、日志记录、错误)。。。虽然我通过apache的mod_rewrite模块在视图中执行路由操作,但我正在编辑我的答案,以便更清楚地显示我打算解释的内容。我使用了上面地图中的大量内容,这非常有用。为了安全起见,我特别喜欢将所有文件夹移到公用文件夹上方。一流!关于路由器,我在系统的基本应用程序目录中创建了route.php。它与config.php放在一起。我使用config来建立文件目录和其他重要信息,路由只包括config和runs。因此,我的应用程序只需在index.php require('../app/router.php')中调用以下内容//初始化路由器$app=新路由器//路由并运行$app->Route();然后它就走了!链接死了。谢谢你的信息,迈克;更新我的答案+复制/粘贴/格式化原始文档的相关摘录