PHP项目的文件夹结构
我决定从头开始完全重写我的旧PHP项目。以前,我每个页面都有一个文件,现在我想用MVC模式方法代替一个入口点。这个项目本身相当大,我正在尝试构建自己的框架,以便能够很好地集成所有内容 我在stackoverflow上搜索过类似的问题,发现了一些,但它们的文件夹结构完全不同,所以我决定发布自己的问题 迄今为止的文件夹结构 细节PHP项目的文件夹结构,php,design-patterns,Php,Design Patterns,我决定从头开始完全重写我的旧PHP项目。以前,我每个页面都有一个文件,现在我想用MVC模式方法代替一个入口点。这个项目本身相当大,我正在尝试构建自己的框架,以便能够很好地集成所有内容 我在stackoverflow上搜索过类似的问题,发现了一些,但它们的文件夹结构完全不同,所以我决定发布自己的问题 迄今为止的文件夹结构 细节 /applications-我已经将管理与普通网站分开,并且我还将使用不同的子域进行管理 /applications/app/private-nginx已阻止对此文件夹的
- /applications-我已经将管理与普通网站分开,并且我还将使用不同的子域进行管理
- /applications/app/private-nginx已阻止对此文件夹的访问
- /applications/app/public-顾名思义,网络上所有可见的东西
- /applications/app/index.php-每个网站的入口点
- /backups-数据库备份
- /library-基本控制器/模型位于此处
- /library/helpers-将在两个网站中使用的所有帮助程序类都在这里,因此我不需要将它们复制/粘贴到两个应用程序中
非常感谢您的帮助 我使用的是类似的结构(也有自制的框架,但从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
/应用程序
/管理
/私人的
/控制器
/模型
/观点
configuration.php
/公共我猜管理和网站是网站的不同模块
为什么你没有一个共享或核心模块文件夹。例如,您有一个名为“User”的数据库模型和名为createUser()、editUser()、listUsers()、changeRightsOfUser()等方法。。使用此结构,您需要为所有模块编写和抽象此模型
你的控制器必须是唯一的,这是好的。但是模型对于每个模块都是可用的或可扩展的。MVC模式与应用程序的文件夹布局完全无关
无论您是将所有文件放在一个文件夹中,还是使用问题中所示的布局,都是完全无关的。它并没有从中获得多少MVC,因为MVC不是关于文件夹,而是关于
除非您遵循需要特定文件命名方案(如PEAR)的代码约定,否则对于您的应用程序来说,唯一重要的是您的自动加载程序可以在运行时以某种方式找到文件。因此,如果你认为上面显示的布局对你有好处,那么就去做吧
:
您的体系结构应该告诉读者有关系统的信息,而不是您在系统中使用的框架。如果您正在构建一个医疗保健系统,那么当新程序员查看源代码库时,他们的第一印象应该是:“哦,这是一个医疗保健系统”。这些新程序员应该能够学习系统的所有用例,但仍然不知道系统是如何交付的。他们可能会对你说:“我们看到一些看起来有点像模型的东西,但是视图和控制器在哪里呢?”你应该说:“哦,这些都是你目前不需要关心的细节,我们稍后会向你展示。”
快速提示:我将远离公共/私人文件夹,因为您实际上将自己锁定为两个角色。在这种情况下,ACL实现将很困难/令人困惑 我想这差不多就是总结。使用固定目录和包含命名方案代替自动加载器,并不是因为应用程序设计需要它。
/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