PHP项目的文件夹结构

9 php design-patterns

我决定从头开始完全重写我的旧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
Run Code Online (Sandbox Code Playgroud)

细节

  • / applications - 我将管理与普通网站分开,我也会使用不同的子域进行管理.
  • / applications/app/private - nginx阻止访问此文件夹.
  • / applications/app/public - 顾名思义,网上可见的所有内容.
  • /applications/app/index.php - 每个网站的入口点.
  • / backups - 数据库备份.
  • / library - 基本控制器/模型驻留在这里.
  • / library/helpers - 将在这两个网站中使用的所有帮助程序类都在这里,所以我不需要将它们复制/粘贴到两个应用程序中.

主要问题

这是构建我的网站的好方法还是你会以不同的方式做事?这个结构可能会遇到任何陷阱吗?有什么我想念的吗?

非常感谢所有帮助!

Gor*_*don 8

MVC模式与应用程序的文件夹布局完全无关.

无论是将所有文件放在一个文件夹中还是使用问题中显示的布局都是完全无关紧要的.它并没有从中获得更多或更少的MVC,因为MVC不是关于文件夹,而是关于将用户界面交互分成三个不同的角色.

除非您遵循需要特定文件命名方案(如PEAR)的代码约定,否则对您的应用程序唯一重要的是您的Autoloader可以在运行时以某种方式查找文件.因此,如果你认为上面显示的布局对你有好处,那就去吧.

Robert"Uncle Bob"Martin建议你的文件夹布局应该表达应用程序的内容.:

您的架构应该告诉读者系统,而不是系统中使用的框架.如果您正在构建医疗保健系统,那么当新程序员查看源代码库时,他们的第一印象应该是:"哦,这是一个健康护理系统".那些新程序员应该能够学习系统的所有用例,但仍然不知道如何交付系统.他们可能会来找你并说:"我们看到一些看起来像模特的东西,但是视图和控制器在哪里",你应该说:"哦,那些细节不需要你关注你,我们以后会告诉你的."


gru*_*unk 2

我正在使用类似的结构(也使用自制框架,但从网络根目录备份)。您可以在私人文件夹中添加一个“表单”文件夹。

我用它来使控制器更具可读性。这些表单通常是一堵巨大的目标代码墙。将它们放入控制器中包含的外部文件中是一个好主意。

不要忘记从重写规则中排除公用文件夹,一切都应该没问题:)

另一种解决方案是将 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
Run Code Online (Sandbox Code Playgroud)