我决定从头开始完全重写我的旧PHP项目。之前,我为每个页面都有一个文件,现在我想使用MVC模式方法而不是一个入口点。项目本身很大,我正在尝试构建自己的框架,以便我可以很好地集成所有内容。
我搜索了stackoverflow以寻找类似的问题,我发现了一些但是他们的文件夹结构完全不同,所以我决定发布我自己的文件。
/applications
/administration
/private
/controllers
/models
/views
configuration.php
/public
/ajax
/fonts
/icons
/images
/stylesheets
index.php
/website
/private
/controllers
/models
/views
configuration.php
/public
/ajax
/fonts
/icons
/images
/stylesheets
index.php
/backups
/library
/helpers
datetime.php
text.php
controller.php
model.php
这是构建我的网站的好方法还是你会以不同的方式做事?这个结构可能会遇到任何陷阱吗?有什么我想念的吗?
非常感谢所有帮助!
答案 0 :(得分:8)
MVC模式与应用程序的文件夹布局有绝对没有。
无论是将所有文件放在一个文件夹中还是使用问题中显示的布局都是完全无关紧要的。它并没有从中获得更多或更少的MVC,因为MVC不是关于文件夹,而是关于splitting user interface interaction into three distinct roles。
除非您遵循需要某种文件命名方案(如PEAR)的代码约定,否则对您的应用程序唯一重要的是您的Autoloader可以在运行时以某种方式找到文件。因此,如果你认为上面显示的布局对你有好处,那就去吧。
您的架构应该告诉读者系统,而不是系统中使用的框架。如果您正在构建医疗保健系统,那么当新程序员查看源代码库时,他们的第一印象应该是:“哦,这是一个健康护理系统”。那些新程序员应该能够学习系统的所有用例,但仍然不知道如何交付系统。他们可能会来找你并说:“我们看到一些看起来像模特的东西,但是视图和控制器在哪里”,你应该说:“哦,那些细节不需要你关注你,我们以后会告诉你的。“
答案 1 :(得分:2)
我正在使用类似的结构(也使用自制框架,但是从webroot备份)。您可以在私人文件夹中添加“表单”文件夹。
我使用它来使控制器更具可读性。表格通常是目标代码的一面大墙。将它们放在控制器中包含的外部文件中是个好主意。
不要忘记从重写规则中排除公用文件夹,一切都应该是好的:)
另一个解决方案是将index.php放在公用文件夹中,并将此文件夹定义为nginx中的webroot。它阻止远程访问应该仅由框架使用的所有其他文件(如备份文件)。
/applications
/administration
/private
/controllers
/models
/views
configuration.php
/public <---- Vhost WebRoot
/ajax
/fonts
/icons
/images
/stylesheets
index.php
/website
/private
/controllers
/models
/views
configuration.php
/public <---- Vhost WebRoot
/ajax
/fonts
/icons
/images
/stylesheets
index.php
/backups
/library
/helpers
datetime.php
text.php
controller.php
model.php
答案 2 :(得分:2)
快速注意:我会远离公共/私人文件夹,因为您基本上将自己锁定为两个角色。在这种情况下,ACL实现将很困难/困惑。
答案 3 :(得分:0)
我猜管理和网站是不同的网站模块。
为什么没有共享或核心模块文件夹。例如,您有一个名为“User”的数据库模型和名为createUser(),editUser(),listUsers(),changeRightsOfUser()等的方法。使用此结构,您需要为所有模块编写和抽象此模型。
你的控制器必须是唯一的,这很好。但是模型可以用于每个模块或可扩展。