Laravel 9 is Released! - Laravel长期支持框架的新功能?
Laravel被认为是最流行的PHP框架. Laravel为大多数web项目的Laravel开发人员提供了愉快和创造性的体验.
然而,总有改进的空间. 此前,我们已经分享了预期 Laravel 9 features. On February 8, 2022; Laravel has rolled out the new long-term support version of Laravel 9 with new features and fascinating enhancements. 新特性包括最小的PHP v8版本.0 version, 控制器路由组, 刷新默认点火错误页面, Symfony邮件集成, 改进了Eloquent mutators/accessors, scout database, Flysystem 3.x, and many more.
随着Laravel 9的发布, Laravel社区已经宣布了这一点, from now, Laravel将大约每年发布一个新的主要版本,而不是六个月的时间表. 它旨在减轻社区的维护负担,并挑战Laravel团队在不中断的情况下提供出色的新增强功能. 因此,Laravel 10的下一个主要版本计划于2023年2月7日发布.
Moreover, Laravel团队宣布,Laravel 9是下一个长期支持,并在2024年2月之前获得bug修复,在2025年之前获得安全修复.
在本文中,探索9.X顶级特性、增强、发布说明和改进.
YOU MAY ALSO LIKE: Laravel 10即将推出!
主要功能和发行说明:
最低PHP要求
Laravel 9将使用Symfony v6的升级版本.0, so Laravel 9.x至少需要PHP版本8.0.2
Symfony Mailer
The Swift Mailer 先前版本的Laravel使用了这个库. But it is no longer maintained; and Symfony mailer has taken the palace of it. So, your Laravel developer 团队需要升级您的Laravel应用程序以与Symfony邮件兼容.
子句和全文索引在哪里
当使用MySQL或PostgreSQL时,Laravel 9允许对列定义进行全文索引.
Full-text indexes:
$table->text('role')->fullText();
whereFullText()方法:
$users = DB::table('users') ->whereFullText('role', 'admin') ->get();
Scout Database Engine
您可以使用Scout数据库引擎,如果您 自定义Laravel应用程序 需要小型到中型数据库. 当您需要从现有数据库中过滤结果时,它将使用“where like”子句和全文索引.
Flysystem 3.x
在升级到Laravel 9时,请确保您的应用程序必须与Flysystem 3兼容.x. 当Laravel 9将他们的上游Flysystem依赖升级到Flysystem 3时.x.
Laravel 9将Flysystem依赖升级为Flysystem 3.x. 它通过“存储”门面为所有文件系统交互提供动力.
Laravel Breeze API & Next.js
随着Laravel 9的升级, Laravel Breeze入门工具包已获得API和Next的脚手架模式.js frontage execution. 这可以用来启动当前作为后端呈现的自定义应用程序.
控制器路由组改进
Laravel 9允许你使用controller方法来定义组内所有路由的公共控制器.
use App\Http\Controllers\ProductController; Route::controller(ProductController::class)->group(function () { Route::get('/product/{slug}', 'show'); Route::post('/product', 'store');});
Scoped Route Bindings
Laravel experts 可能希望以一种必须是前一个Eloquent模型的子代的方式扩展下一个Eloquent模型. 例如,您可能需要按符号检索特定用户的博客文章:
use App\Models\Post;use App\Models\User; Route::get('/用户/ {user} /文章/{:蛞蝓}', function (User $user, Post $post) { return $post;});
Laravel将自动扩展查询,通过使用约定来猜测父节点上的关联名称,从而获得父节点上确定的模型. Although, 只有当自定义键用于子路由绑定时,Laravel才支持这种行为. In Laravel 9.在x中,开发者需要调用Laravel来限定“子”绑定的作用域,只要自定义键没有提供. 当需要定义路由时,它需要调用scopeBindings方法:
use App\Models\Post;use App\Models\User; Route::get('/用户/ {user} /文章/{职位}', function (User $user, Post $post) { return $post;})->scopeBindings();
或者它需要指示一整组路由定义使用有作用域的绑定:
Route::scopeBindings()->group(function () { Route::get('/用户/ {user} /文章/{职位}', function (User $user, Post $post) { return $post; });});
Laravel 9 New Designs
欢迎新的增强的点火异常页面
新的Laravel 9错误页面已经从零开始进行了修改. 它包含了添加的信息, 像“打开编辑器”这样的功能,” dark / light themes, stack, context, 还有路由参数等等. 因此,它可以帮助开发人员更好地理解.
路线的美好体验:列表
在Laravel 9版本中,Route:list命令行接口的输出得到了改进, 它在执行路由定义时提供了增强的体验.
终端中新增测试“-coverage”选项
在Laravel 9中,引入了“工匠测试覆盖”选项. 它将直接在终端上显示测试覆盖率.
It has been come with ‘—min’ option; to specify minimum threshold for meeting the test coverage percentage.
Laravel’s New Helpers
新增' str() '和' to _route() '辅助函数
str( )
Laravel 9中的新助手是str(). str函数将返回一个新的Stringable实例.
$string = str('Adam')->append(' Mathew');// 'Adam Mathew' $snake = str()->snake('OldRecord');// 'old_record'
Developers are already known to this; if no argument is passed, str函数返回一个实例Illuminate\Support\ str.
to_route( )
to_route函数将用于将用户从路由和控制器重定向到特定的路由:
return to_route('users.show', ['user' => 1]);
如果需要,您也可以附加HTTP状态码重定向如下:
return to_route('users.show', ['user' => 1], 302, ['X-Status' => 'Redirected']);
Enums in Laravel 9
In this article, 我们还将介绍Laravel枚举的一些最重要的应用:
带枚举的路由绑定(PHP 8.1)
PHP 8.1启动对枚举的支持. Laravel 9.x has the capability to type-hint on Enum on your route definition; it will only invoke if that route segment is valid; otherwise, 它将返回HTTP 404响应. For e.g.:
enum Category: string{ case Cloths = 'shirt'; case Electronic = 'television';}
Enum Eloquent属性强制转换
Eloquent允许您将属性值强制转换为PHP enum. Enum类型转换仅支持PHP 8.1+. Laravel开发者只需要使用$cast属性数组:
use App\Enums\ServerStatus; /** *应该强制转换的属性. * * @var array */protected $casts = [ 'status' => ServerStatus::class,];
Once it defined; the attribute will be cast to and from an Enum:
if ($server->status == ServerStatus::provisioned) { $server->status = ServerStatus::ready; $server->save();}
Other Laravel 9.x Release Notes:
增强的雄辩访问器/突变器
随着Laravel 9的发布, it provides an enhanced way to define Eloquent accessors and mutators; using a non-prefixed and single method by type-hinting a return type of
use 照亮\数据库\雄辩的\ \Attribute; public function name(): Attribute{ return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, );}
Cache object values is also a new way to define accessories; just like custom cast classes.
use App\Support\Address;use 照亮\数据库\雄辩的\ \Attribute; public function address(): Attribute{ return new Attribute( get: fn ($value, $attributes) => new Address( $attributes['address_line_first'], $attributes['address_line_second'], ), set: fn (Address $value) => [ 'address_line_first' => $value->lineFirst, 'address_line_second' => $value->lineSecond, ], );}
Slot name Shortcut
最新版本的Laravel 9.X需要用更短的语法来澄清插槽的名称:
<x-slot:title> Server Errorx-slot>
带引导的分页视图
使用Bootstrap 5开发的分页视图现在可以在Laravel中使用. 的引导方法中调用分页器的useBootstrapFive方法 应用\ \ AppServiceProvider提供者
class:
use 照亮\分页\Paginator; /** *引导任何应用程序服务. * * @return void */public function boot(){ Paginator::useBootstrapFive();}
升级的IDE支持集合
Laravel 9.X现在提供了升级的集合组件的“泛型”样式定义, 通过增强静态分析和IDE支持. 现在,像PHPStorm和PHPStan这样的ide可以更好地理解Laravel集合.
内联刀片模板渲染
将原始刀片模板字符串转换为有效的HTML, 使用“Blade”facade提供的“render”方法. 它将接受Blade模板字符串和数据的可选数组.
use 照亮\外墙\ \支持Blade; return Blade::render('Hello, {{ $name }}', ['name' => 'Adam Mathew']);
Likely, rendercommand将通过调用组件实例来渲染给定的类组件:
use App\View\Components\HelloComponent; return Blade::renderComponent(new HelloComponent(' Adam Mathew '));
选中/选择刀片指令
Laravel开发者可以使用@checked指令来指示一个给定的HTML复选框输入是否被“选中”. 如果条件为true,它将回显检查:
<input type="checkbox" name="active" value="active" @checked(old('active', $user->active)) />
Similarly, the @selected
指令用于指示给定的选择选项被"选中":
<select name="version"> @foreach ($product->versions as $version) <option value="{{ $version }}" @selected(old('version') == $version)> {{ $version }} option> @endforeachselect>
升级了嵌套数组数据的验证
当使用Rule::forEach方法为属性分配验证规则时,开发人员现在可以获得给定嵌套数组元素的值. 它接受一个闭包,该闭包将在验证数组的每次循环时调用,并获取值和显式的完全扩展的属性名称.
use App\Rules\HasPermission;use 照亮\外墙\ \支持Validator;use 说明验证\ \Rule; $validator = Validator::make($request->all(), [ 'companies.*.id' => Rule::forEach(function ($value, $attribute) { return [ Rule::exists(Company::class, 'id'), new HasPermission('manage-company', $value), ]; }),]);
The Laravel 9.x是他们的贡献者的全球团队的努力,Laravel社区总是感谢他们的努力. 我们希望这篇文章能让你预览一下Laravel 9的新特性和主要改进.x LTS Release!
那么,你还在等什么? 将您的Laravel应用程序升级到Laravel 9.x. 天网科技专门从事 Laravel开发服务 包括定制开发, upgrades, migration, Laravel企业解决方案, restful API开发, extension development, patch upgrades, 第三方集成服务, 电子商务的发展, 定制Laravel设计服务, and much more. 与我们联系 [email protected] 了解更多或提交以下请求表格升级Laravel 9.x.
Source: Laravel 9发布说明