MVC PHP框架中的目录结构

5 php model-view-controller frameworks directory-structure

此时,我的框架的目录结构如下所示:

framework/
    libraries/
        autoload/
            autoload.class.php
            resource.namespaces.php

        router/
            tests/
                router.test.php
            router.class.php
            resource.routes.php

    configuration/
        framework.configuration.php
        router.configuration.php

    controllers/
        index.controller.php

    models/
        index.model.php

    views/
        default/
            index/
                index.view.php
            header.view.php
            footer.view.php

    assets/
        css/
        javascript/
        images/

    index.php
Run Code Online (Sandbox Code Playgroud)

当我的框架更小时,它更清洁.我看看其他流行的框架.他们有两个主要文件夹:

framework/
    app/
    web/
Run Code Online (Sandbox Code Playgroud)

实际上,这种结构非常干净和漂亮,因为我们将前端和后端分开.但是我想知道我应该把它们放进去.

  • 从逻辑上讲,libraries文件夹应该在app文件夹中,但它实际上不是应用程序的一部分.对我来说,一个应用程序有models,controllerviews.我认为libraries应该放在外面.我应该把图书馆放在哪里?

  • 我的PHPUnit考试中有很多考试libraries.我应该tests在每个库中添加一个名为的文件夹,还是应该将其放在app文件夹内/外?

  • 如果我想实现模板功能,我可以在哪里选择要用于我的网站的模板,我该如何组织它?每个模板都有不同的元素,所以header.view.php不一样,等等.现在,我在视图中创建一个文件夹文件夹.但我认为这是一个坏主意,因为现在,对于每个模板,我必须重新创建所有视图.

  • 在许多应用程序中,有一个vendor包含所有主类的文件夹.这和我的libraries文件夹一样吗?它有相同的作用吗?

  • 我也有一些'资源'文件(例如:)resources.routes.php.它们用于添加一些路由/命名空间.这有点像配置文件.我应该为这些文件创建另一个目录,还是将它们放在他们引用的类中?

Pat*_*ick 9

我会尝试涵盖你的所有问题.

您在许多应用程序中看到的供应商文件夹来自作曲家.在该文件夹中是应用程序/框架的所有依赖项(通常是来自其他人的库).

Composer允许您为框架提供一些好的组件,这样您就不必从头开始编写所有内容.比方说,我想使用FastRoute,因为它比我自己编写的任何路由器要好得多.所以我只是将以下内容添加到我的composer.json运行中composer update,我可以在我的框架中使用它.

{
    "require": {
        "nikic/fast-route": "dev-master"
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用composer 自动加载您的类,这样您就不必编写自己的自动加载器(并将其缓存用于生产).

我真的不喜欢你当前的文件名.将.class添加到文件名对我来说绝对没有意义.点也使自动加载变得复杂.我建议你看看PSR-0,了解如何处理文件名/命名空间(这是由作曲家自动加载器支持的).

对于测试,您可以Tests在项目的根文件夹中创建一个文件夹,然后在其中重新创建项目的目录结构,并在匹配的文件夹中添加测试类.您也可以将模拟对象放在那里.这样可以轻松地为应用程序的某个部分运行测试.

我还建议您将应用程序移出公用文件夹,而不是public只有一个index.php和您的资产的文件夹.index.php除了要求您的前端控制器引导您的应用程序之外什么都不做.如果由于某种原因您的Web服务器停止处理PHP,那么这样做会增加另一层安全性.否则,访问者将能够看到您的整个源代码.

为了获得文件夹结构问题的一些灵感,我建议您查看其他人如何解决此问题.AryaPitchBlade将是一个很好的起点,因为它们比symfony这样的框架小.

我希望这有帮助.在将来,我建议您将问题分解为不同的SO问题,这样可以使答案更容易,并且您将获得更好的答案,因为知道您的某个问题的答案的人也不必回答所有问题.