深入探讨 Laravel 11 中简化的目录结构

2024 年 1 月 30 日

我们认为您会喜欢在开始时使用的新鲜骨架 拉拉维尔 11 应用程序将于下周发布!新手会欣赏这种极简主义,而经验丰富的开发人员在升级时不会遇到典型 Laravel 应用程序结构的重大变化。

如果您想继续进行实验,可以同时创建 Laravel 10 和 Laravel 11 项目。我们使用以下命令来执行此操作:

# Update the installer
composer global update laravel/installer -W

cd path/to/projects

# Create a Laravel 10 app
laravel new laravel-10-app -n --git --pest

# Crate a Laravel 11 app
laravel new laravel-11-app --dev -n --git --pest

从表面上看,项目目录结构看起来相同:

但是,如果您开始深入子目录,文件数量会从全新的 Laravel 11 安装中减少约 69 个文件:

# Fresh Laravel v10 app
$ find . -type f -not -path "./vendor/*" | wc -l
=> 217

# Fresh Laravel v11 app (as of 01/29/2024)
$ find . -type f -not -path "./vendor/*" | wc -l
=> 148

让我们回顾一下最重要的更新,看看它们与 Laravel 10 应用程序相比如何,以便您为新的 Laravel 11 应用程序的变化做好准备。

app 目录

app 目录已被极大地精简,将 Laravel 附带的九个中间件移入框架并移出项目。通常,这些中间件不会进行大量定制,Laravel 11 将提供其他方法来定制内置中间件并添加您自己的中间件。

app 新 Laravel 11 应用程序中的目录

中间件更改是通过 bootstrap/app.php 根据 Taylor Otwell 的说法,这是一个“用于配置 Laravel 的精益路由风格的文件”,如下所示:

return Application::configure(basePath: dirname(__DIR__))
    ->withProviders()
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        // api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        // channels: __DIR__.'/../routes/channels.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

您可以通过在以下内容中添加类似以下内容来添加应用程序中间件 withMiddeware() 关闭:

$middleware->web(append: \App\Http\Middleware\ExampleMiddleware::class);

Kernel.php 文件不再位于 Laravel 项目中,这些文件是通过框架处理的 bootstrap/app.php 文件。

您可能还注意到 Controllers 目录只包含一个 Controller 不从任何东西扩展的类。这取决于您想要如何扩展控制器(或不扩展),但它提供了默认值 abstract Controller 班级。

config 目录

对你来说最大的震撼可能就是更新了 config 目录,里面什么都没有(除了 .gitkeep 文件)。但是,您会注意到,存在更多配置选项 .env.example 文件。

如果您想从框架发布任何给定的配置文件来自定义它,您可以通过 config:publish 命令:

# config/database.php
php artisan config:publish database

# config/logging.php
php artisan config:publish logging

# Or publish all of them
php artisan config:publish

您可以自由地仅扩展您关心的配置值,它们将与框架的默认值合并,因此您不必将所有已发布的配置选项保留在给定文件中。

假设您想要在框架附带的配置中查找配置值。在这种情况下,您可以使用 Artisan config:show 命令,发布配置,或在 config/logging.php Laravel供应商文件夹中的文件:

php artisan config:show logging

cat vendor/laravel/framework/config/logging.php

database 目录

database 目录大致相同。但是,您会注意到迁移文件名的前缀并不代表给定日期,而是根据需要保持顺序。这 create_personal_access_tokens.php 迁移文件不再位于项目中。仅当您构建 API 时才需要个人访问令牌,我们将在 routes 目录更改。

另外, database.sqlite 文件将默认安装,除非您在创建新的 Laravel 项目时选择不同的数据库选项。

routes 目录

路线目录也被精简为仅包含 web.phpconsole.php 路线文件。如果您想创建 API 或使用广播功能,可以通过以下方式安装它们 artisan :

php artisan install:api
php artisan install:broadcasting

这些命令将引入所需的迁移、JavaScript 和配置文件。这样做的好处是,不需要广播或 API 路由的应用程序不必担心项目中存在这些不必要的文件。

拉拉维尔 11 routes 目录

test 目录

test/ 目录不再包含 CreatesApplication Laravel 11 项目中的特质。如果您升级 Laravel 10 项目,则可以删除此特征,因为它现在作为基础的一部分提供 TestCase 从框架来看。

在 Laravel 10 项目中,基础中唯一包含的内容 TestCase Laravel 10 中的类是 CreatesApplication 特征,它在每次测试之前创建新应用程序作为设置的一部分时引导应用程序。将现有应用程序升级到 Laravel 11 后,您可以安全地删除此特征(及其使用)。

了解更多

如果您想了解有关 Laravel 11 的更多信息,请查看我们的 拉拉维尔 11 发布有关这个令人兴奋的新版本的所有详细信息。


帖子 深入探讨 Laravel 11 中简化的目录结构 首先出现在 Laravel 新闻

加入 Laravel 时事通讯 直接在您的收件箱中获取所有此类最新的 Laravel 文章。