我们认为你会喜欢在下周发布的 Laravel 11 应用中的全新骨架!新手会欣赏其极简性,而升级的经验丰富的开发人员不会遇到破坏性更改。您无需更改 Laravel 10 应用程序结构即可升级到 Laravel 11。
如果你想跟着做并进行实验,你可以并排创建一个 Laravel 10 和 Laravel 11 项目。我们使用了以下命令来完成这个操作
# Update the installercomposer global update laravel/installer -W cd path/to/projects # Create a Laravel 10 applaravel new laravel-10-app -n --git --pest # Crate a Laravel 11 applaravel 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 一起提供的 9 个中间件移到了框架中,而不是项目中。通常,这些中间件不会被大量自定义,而 Laravel 11 将提供其他方法来自定义内置中间件并添加你自己的中间件。
全新 Laravel 11 应用中的 app
目录
中间件更改是通过 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.phpphp artisan config:publish database # config/logging.phpphp artisan config:publish logging # Or publish all of themphp artisan config:publish
你可以自由地只扩展你关心的配置值,它们将与框架的默认值合并,因此你无需将所有已发布的配置选项保存在一个给定的文件中。
假设你想在框架提供的配置中查找配置值。在这种情况下,你可以使用 Artisan config:show
命令,发布配置文件,或者在 Laravel 供应商文件夹内的 config/logging.php
文件中查找它。
php artisan config:show logging cat vendor/laravel/framework/config/logging.php
database
目录
database
目录大致相同。但是,你会注意到迁移文件名的前缀不是代表某个日期,而是根据需要按顺序排列。create_personal_access_tokens.php
迁移文件不再存在于项目中。只有在你构建 API 时才需要个人访问令牌,我们将在 routes
目录更改中讨论这一点。
此外,除非你在创建新的 Laravel 项目时选择了其他数据库选项,否则将默认安装 database.sqlite
文件。
routes
目录
routes 目录也被精简,只包含 web.php
和 console.php
路由文件。如果你想创建一个 API 或使用广播功能,你可以通过 artisan
来安装它们
php artisan install:apiphp artisan install:broadcasting
这些命令将引入所需的迁移、JavaScript 和配置文件。这样做的优点是,不需要广播或 API 路由的应用程序不必担心这些不必要的文件存在于项目中。
Laravel 11 routes
目录
test
目录
在 Laravel 11 项目中,test/
目录不再包含 CreatesApplication
特性。如果你升级了 Laravel 10 项目,你可以删除这个特性,因为它现在作为框架中基本 TestCase
的一部分提供。
在 Laravel 10 项目中,Laravel 10 中基本 TestCase
类中包含的唯一内容是 CreatesApplication
特性,它在每次测试之前创建新的应用程序作为设置的一部分启动应用程序。一旦你将现有应用程序升级到 Laravel 11,你就可以安全地删除这个特性(及其用法)。
从 Laravel 10 升级到 Laravel 11
你根本不需要更改 Laravel 10 应用程序的结构来升级到 Laravel 11。这将只适用于全新的应用程序,如果你喜欢,你仍然可以使用旧的方法。
了解更多
如果你想了解更多关于 Laravel 11 的信息,请查看我们的 Laravel 11 文章,其中包含有关这个激动人心的新版本的所有详细信息。