Laravel 9 is Released! - Laravel长期支持框架的新功能?

By: 天网科技美国有限责任公司
Feb 12, 22
Jan 03, 23
Laravel 9 Release

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 Upgrades

路线的美好体验:列表

在Laravel 9版本中,Route:list命令行接口的输出得到了改进, 它在执行路由定义时提供了增强的体验.

Laravel 9 Features

终端中新增测试“-coverage”选项

在Laravel 9中,引入了“工匠测试覆盖”选项. 它将直接在终端上显示测试覆盖率.

It has been come with ‘—min’ option; to specify minimum threshold for meeting the test coverage percentage.

Laravel 9 Development

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 Error
x-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>
@endforeach
select>

升级了嵌套数组数据的验证

当使用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发布说明

Website
459