Laravel 7发行说明
版本化方案
Laravel及官方发布的包皆遵循 语义版本化。主要框架版本每六个月发布一次 (~2月和~8月),而次要和补丁版本可能每周发布一次。次要版本和补丁 决不 包含非兼容性更改。
引入 Laravel 框架或其组件时,应始终使用版本约束,如 ^7.0
,因为 Laravel 的主要版本确实包含非兼容性更改。我们会努力确保您可以在一天或更短的时间内更新到最新版本。
支持政策
对于 LTS 版本,例如 Laravel 6,提供了 2 年的错误修复和3年的安全修复。这些版本提供了最长的支持和维护窗口。对于一般的发行版本,只提供了 6 个月的错误修复和 1 年的安全修复。对于包括 Lumen 在内的所有其他版本,只有最新版本才会修复错误。此外,请查阅 Laravel 支持的 数据库版本。
版本 | 发布时间 | Bug 修复截止时间 | 安全修复截止时间 |
---|---|---|---|
5.5 (LTS) | 2017 年 8 月 30 日 | 2019 年 8 月 30 日 | 2020 年 8 月 30 日 |
5.6 | 2018 年 2 月 7 日 | 2018 年 8 月 7 日 | 2019 年 2 月 7 日 |
5.7 | 2018 年 9 月 4 日 | 2019 年 3 月 4 日 | 2019 年 9 月 4 日 |
5.8 | 2019 年 2 月 26 日 | 2019 年 8 月 26 日 | 2020 年 2 月 26 日 |
6 (LTS) | 2019 年 9 月 3 日 | 2021 年 9 月 3 日 | 2022 年 9 月 3 日 |
7 | 2020 年 3 月 3 日 | 2020 年 9 月 3 日 | 2021 年 3 月 3 日 |
Laravel 7
Laravel 7 通过引入 Laravel Sanctum,路由速度改进,自定义 Eloquent 强制转换(casts), Blade 组件标签,流畅的字符串操作,开发人员专用的 HTTP 客户端, 第一方 CORS 支持, 路由模型绑定作用域改进, 存根自定义, 数据库队列改进, 多邮箱驱动, 查询时间强制转换(casts),新的 artisan test
命令,以及各种其他错误修复和可用性改进,对 Laravel 6.x 继续进行了改善。
Laravel Sanctum
Laravel Sanctum 由 Taylor Otwell建造。
Laravel Sanctum 为 SPA (单页应用程序),移动应用程序和基于令牌的简单 API 提供了轻巧的身份验证系统。 Sanctum 允许应用程序的每个用户生成多个 API 令牌。 这些令牌可以被授予能力/作用域,用于指定允许令牌执行哪些动作。
有关 Laravel Sanctum 的更多信息, 请查看 Sanctum 文档。
自定义 Eloquent 类型转换
自定义 Eloquent 类型转换由 Taylor Otwell 开发贡献.
Laravel 内置了多种常用的类型转换。但是,用户偶尔会需要将数据转换成自定义类型。现在,该需求可以通过定义一个实现 CastsAttributes
接口的类来完成
实现了该接口的类必须事先定义一个 get
和 set
方法。 get
方法负责将从数据库中获取的原始数据转换成对应的类型,而 set
方法则是将数据转换成对应的数据库类型以便存入数据库中。举个例子,下面我们将内置的 json
类型转换以自定义类型转换的形式重新实现一遍:
<?phpnamespace App\Casts;use Illuminate\Contracts\Database\Eloquent\CastsAttributes;class Json implements CastsAttributes
{/*** 将取出的数据进行转换** @param \Illuminate\Database\Eloquent\Model $model* @param string $key* @param mixed $value* @param array $attributes* @return array*/public function get($model, $key, $value, $attributes){return json_decode($value, true);}/*** 转换成将要进行存储的值** @param \Illuminate\Database\Eloquent\Model $model* @param string $key* @param array $value* @param array $attributes* @return string*/public function set($model, $key, $value, $attributes){return json_encode($value);}
}
定义好自定义类型转换后,可以使用其类名称将其附加到模型属性:
<?phpnamespace App;use App\Casts\Json;
use Illuminate\Database\Eloquent\Model;class User extends Model
{/*** 这个属性应该被转化为原生类型** @var array*/protected $casts = ['options' => Json::class,];
}
要学习如何实现自定义 Eloquent 类型转换,包括转换成特定值对象的类型转换,请参照 Eloquent documentation。
Blade 组件标签和变化
Blade 组件标签贡献人员有 Spatie, Marcel Pociot, Caleb Porzio, Dries Vints, 和 Taylor Otwell.
{小提示} Blade 组件已经大刀阔斧修改,其中变化有允许基于标签的渲染,参数管理,组件类,内联视图组件众多变化。经过修改的 Blade 组件如此之多,请从这里 Blade文档来学习这些新特性。
总结为一句,现在的一个组件能从指定的类获取数据。所有的公开属性和方法都清晰地定义在组件类里,会自动组装成组件视图。任何附加的 HTML 属性都指定于一个可以被管理的自动包含$attribute
变量的组件,它是一个属性包的实例。
下面有个例子,我们会假设一个 App\View\Components\Alert
组件定义是这样的:
<?phpnamespace App\View\Components;use Illuminate\View\Component;class Alert extends Component
{/*** 提醒类型** @var string*/public $type;/*** 创建组件实例.** @param string $type* @return void*/public function __construct($type){$this->type = $type;}/***获取给提醒类型的类 ** @return string*/public function classForType(){return $this->type == 'danger' ? 'alert-danger' : 'alert-warning';}/*** 获取渲染组件的视图/内容** @return \Illuminate\View\View|string*/public function render(){return view('components.alert');}
}
并且假设 Blade 组件模板定义是这样的:
<!-- /resources/views/components/alert.blade.php --><div class="alert {{ $classForType() }}" {{ $attributes }}>{{ $heading }}{{ $slot }}
</div>
组件可以被渲染在另一个使用组件标签的 Blade 视图:
<x-alert type="error" class="mb-4"><x-slot name="heading">Alert content...</x-slot>Default slot content...
</x-alert>
如前所述,在大改之后的 Laravel7 当中这是一个非常小又普通的一个功能,而且还没有演示匿名组件,内联视图组件和各种各样的其他特性。请从这里Blade文档来学习这些新特性
{注意} 以前的 Blade 组件
@component
语法没有被移除。
HTTP 客户端
HTTP 客户端是 Guzzle 的一个封装,由 Adam Wathan,Jason McCreary,和 Taylor Otwell 提供。
Laravel 现在提供一套围绕 Guzzle HTTP 客户端](http://docs.guzzlephp.org/en/stable/) 构建的精简且高效的 API,允许你快速向其它 web 应用发起 HTTP 请求。Laravel 基于 Guzzle 的封装专注于最常见的用例和最棒的开发人员体验。例如,客户端发起带 JSON 数据的 POST
请求变得轻而易举:
use Illuminate\Support\Facades\Http;$response = Http::withHeaders(['X-First' => 'foo''X-Second' => 'bar'
])->post('http://test.com/users', ['name' => 'Taylor',
]);return $response['id'];
此外,HTTP 客户端还提供了令人惊叹且易于使用的测试功能:
Http::fake([// Stub a JSON response for GitHub endpoints...'github.com/*' => Http::response(['foo' => 'bar'], 200, ['Headers']),// Stub a string response for Google endpoints...'google.com/*' => Http::response('Hello World', 200, ['Headers']),// Stub a series of responses for Facebook endpoints...'facebook.com/*' => Http::sequence()->push('Hello World', 200)->push(['foo' => 'bar'], 200)->pushStatus(404),
]);
了解更多 HTTP 客户端的特性,请查阅 HTTP 客户端文档.
流畅的字符串操作
流畅的字符串操作由 Taylor Otwell 开发贡献 。
你可能对 Laravel 已有的 Illuminate\Support\Str
这个类比较熟悉,它提供了各种有用的字符串操作函数。基于这些函数, Laravel 7 现在提供了一个更加面向对象的、更加流畅的字符串操作库。你可以使用 Str::of
方法创建一个 Illuminate\Support\Stringable
对象。 然后可以使用该对象的各种方法去操作字符串:
return (string) Str::of(' Laravel Framework 6.x ')->trim()->replace('6.x', '7.x')->slug();
有关流畅的字符串操作可用方法的更多信息, 请查阅完整文档。
路由模型绑定优化
路由模型绑定优化由 Taylor Otwell 开发贡献 。
自定义键名
有时你可能希望使用 id
以外的字段来解析 Eloquent 模型。 为此, Laravel 7 允许你在路由参数中指定某个字段:
Route::get('api/posts/{post:slug}', function (App\Post $post) {return $post;
});
隐式绑定约束
有时,当在路由中隐式绑定多个 Eloquent 模型时,可能希望对第二个 Eloquent 模型进行约束,使其必须是第一个 Eloquent 模型的子类。例如,考虑这种情况,该情况是通过 Slug 为特定用户查找博客文章的:
use App\Post;
use App\User;Route::get('api/users/{user}/posts/{post:slug}', function (User $user, Post $post) {return $post;
});
当使用自定义键隐式绑定作为嵌套的路由参数时,Laravel 7 将自动确定查询范围,以使用约定猜测其父级上的关系名称,以其父级检索嵌套模型。在这种情况下,将假定 User
模型关联了名为 posts
(路由参数名称的复数) 的关系,该关系可用于检索 Post
模型。
有关路由模型绑定的更多信息,请查阅路由文档。
多邮件驱动程序
多邮件驱动程序支持由 Taylor Otwell 贡献。
Laravel 7 允许为单个应用配置多个邮件驱动。在 mail
配置文件中的每个邮件驱动都拥有它们自己的配置以及自己独特的 「transport」,这允许你的应用使用不同的邮件服务来发送某些邮件。例如,你的应用可以使用 Postmark 发送批量邮件,使用 Amazon SES 发送公务邮件。
默认情况下,Laravel 将使用 mail
配置文件中的 default
选项指定的邮件驱动作为邮件驱动。然而,你可以通过 mailer
方法来使用特定的邮件驱动来发送邮件。
Mail::mailer('postmark')->to($request->user())->send(new OrderShipped($order));
路由缓存速度改进
路由缓存速度改进由上游的 Symfony 的贡献者和 Dries Vints 贡献
Laravel 7 提供了一种新的方法,用于匹配使用 Artisan 命令 route:cache
缓存的已编译缓存路由。在大型应用程序(例如,具有800条或更多路由的应用程序)上,这些改进可以使简单的「Hello World」基准测试每秒的请求速度 提高2倍 ,而无需更改应用程序。
CORS 支持
CORS 支持由 Barry vd. Heuvel 贡献
Laravel 7 通过集成由 Barry vd. Heuvel 编写的受欢迎的 Laravel CORS 软件包,为配置跨域资源共享(CORS) OPTIONS
请求响应提供了官方支持, 默认的 Laravel 应用程序框架 中包含一个新的 cors
配置。
有关 Laravel 7.x 中的 CORS 支持的更多信息,请查阅CORS文档。
查询时类型转换
查询时类型转换由 Matt Barlow 开发贡献.
有时候需要在查询执行过程中对特定属性进行类型转换,例如需要从数据库表中获取数据的时候。举个例子,请参考以下查询:
use App\Post;
use App\User;$users = User::select(['users.*','last_posted_at' => Post::selectRaw('MAX(created_at)')->whereColumn('user_id', 'users.id')
])->get();
在该查询获取到的结果集中,last_posted_at
属性将会是一个字符串。假如我们在执行查询时进行 date
类型转换将更方便。你可以通过使用 withCasts
方法来完成上述操作:
$users = User::select(['users.*','last_posted_at' => Post::selectRaw('MAX(created_at)')->whereColumn('user_id', 'users.id')
])->withCasts(['last_posted_at' => 'date'
])->get();
MySQL 8+ 数据库队列改进
MySQL 数据库队列改进由 Mohamed Said 开发贡献.
在先前版本的 Laravel 中, database
队列的健壮性被认为无法满足生产环境的需求。但是,Laravel 7 针对使用基于 MySQL 8+ 数据库队列的应用进行了改进。通过使用 FOR UPDATE SKIP LOCKED
语句进行 SQL 的优化,database
队列驱动可以安全地用于生产环境。
Artisan test
命令
test
命令由 Nuno Maduro 贡献
除了 phpunit
命令之外,现在可以使用 test
Artisan 命令来运行测试。 Artisan 测试运行器提供了漂亮的控制台,以及有关当前正在运行的测试的更多信息。 此外,运行器将在第一次测试失败时自动停止:
php artisan test
可以传递给 phpunit
命令的任何参数也可以传递给 Artisan test
命令:
php artisan test --group=feature
Markdown 邮件模板改进
Markdown 邮件模板改进由 Taylor Otwell 贡献
默认的Markdown邮件模板已基于Tailwind CSS调色板做出全新、更现代的设计。 当然,可以根据您的应用程序的需求来发布和定制此模板:
有关 Markdown 邮件的更多信息,请查看邮件发送.
自定义桩代码
自定义桩代码由 Taylor Otwell贡献
Artisan 控制台的 make 命令用于创建各种类,例如控制器,任务,迁移和测试。 这些类是根据输入填充值使用「桩代码」生成文件的。 但是,有时可能希望对 Artisan 生成的文件进行小的更改。 为此,Laravel 7提供了 stub:publish
命令来发布最常见的自定义桩代码:
php artisan stub:publish
发布的桩代码将位于应用程序根目录中的 stubs
目录中。 当使用 Artisan 的 make 命令生成它们的相应类时,对这些桩代码所做的任何更改都会反映出来。
队列maxExceptions
配置
maxExceptions
属性由Mohamed Said提交贡献.
有时可能希望指定可以尝试多次的任务,但是如果重试是由给定数量的异常触发的,则该任务将失败。在Laravel7中,可以在任务类上定义 maxExceptions
属性:
<?phpnamespace App\Jobs;class ProcessPodcast implements ShouldQueue
{/*** 任务可以被重试的次数。** @var int*/public $tries = 25;/*** 失败之前允许抛出异常的最大次数。** @var int*/public $maxExceptions = 3;/*** 执行任务。** @return void*/public function handle(){Redis::throttle('key')->allow(10)->every(60)->then(function () {// 获取锁,处理博客进程...}, function () {// 无法获取锁...return $this->release(10);});}
}
在此示例中,如果应用程序无法获得 Redis 锁,则该任务将释放十秒钟,并将继续重试 25 次。但是,如果任务抛出三个未处理的异常,则该任务将失败。
Laravel 7发行说明相关推荐
- Laravel5.5开发规范 [ 个人总结 ]
我先在石墨文档总结的这篇开发规范,感觉在石墨文档的排版看着更舒服,点击传送:Laravel5.5开发规范 一.概述 laravel5.5是目前laravel框架发行使用最稳定的版本,laravel社区 ...
- laravel 5.1 php版本号,发行版本说明 | 序言 | Laravel 5.1 中文文档
发行版本说明 由 学院君 创建于5年前, 最后更新于 11个月前 版本号 #2 19641 views 23 likes 0 collects 支持政策 LTS版本,比如Laravel 5.1,将会提 ...
- Laravel 7 新特性(发行说明)
声明:Laravel 7 于 2020 年 3 月 3 日正式发布,不是 LTS 版本,所以 bug 修复支持会持续半年,到 2020 年 9 月 3 日,也就是下一个主版本 Laravel 8 发布 ...
- PHP安装laravel(win+linux)
作为一名不优秀的程序猿,忙碌的四月终于结束了,五一大假的最后一天,终于有时间来整理整理这段时间的收获了. 一.laravel介绍 首先看看http://www.sitepoint.com/网站做的一个 ...
- laravel json字段添加_Laravel 6.0.4 中将添加计划任务事件
文章转发自专业的Laravel开发者社区,原始链接:https://learnku.com/laravel/t/34895 Laravel 团队宣布 Laravel v6.0.4 即将发布. 此版本包 ...
- php laravel 框架 APP_KEY 的作用
目录 Laravel 安全修复 什么是 APP_KEY? 关于密码哈希的常见误解 加密与散列 对称加密 单向哈希 更改密钥 多台服务器 现有用户的 sessions (cookies) 您已加密的其他 ...
- php 隐式路由,关于Laravel 7 的简单隐式路由模型绑定
搜索热词 Laravel 的下一个主要发行版本 ,你可以直接在路由定义中自定义隐式路由模型绑定: Route::get('/posts/{post:slug}',function (Post $pos ...
- linux lnmp1.5 部署laravel项目
linux version: ubuntu 18.04 lnmp version: 1.5 使用composer创建一个 laravel项目 安装composer: https://www.jians ...
- Laravel 5.5 使用 Jwt-Auth 实现 API 用户认证以及无痛刷新访问令牌
最近在做一个公司的项目,前端使用 Vue.js,后端使用 Laravel 构建 Api 服务,用户认证的包本来是想用 Laravel Passport 的,但是感觉有点麻烦,于是使用了 jwt-aut ...
最新文章
- Jmeter使用之:高效组织接口自动化用例技巧
- rocks自建存储流程
- linux下面拷贝pdf却没法在windows下面打开
- dede php分页代码,DEDECMS系统分页标签自定义二次开发
- 【学习笔记】java核心技术学习笔记整理
- python replace函数后面的数字的含义
- log4j mysql 异步_spring boot:配置druid数据库连接池(开启sql防火墙/使用log4j2做异步日志/spring boot 2.3.2)...
- sql azure 语法_Azure中的新SQL数据仓库
- 找不到FLANNConfig.cmake文件
- HBase与Zookeeper数据结构查询
- linux常用查看磁盘空间大小的命令
- html5编写商城页面,HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第2章HTML基础知识...
- idea快捷键自动生成序列化id
- ARMv8-A Generic Interrupt Controller(GIC)
- Premiere使用教程(一)新建项目和序列
- 简述数学建模的过程_数学建模
- Jinja2 入门教程、基本概念、简单使用及使用 Jinja2 生成 H3C 交换机配置举例
- arp-scan使用
- The following packages are not available
- 申办高新技术企业,如何申请高新认定