好的,Laravel 7.x 版本引入了一些重要的新特性和改进,以下是其主要特性概述:
1. Laravel Airlock (Sanctum)
- 轻量级 API 认证系统:专为 SPA (单页应用)、移动应用和简单的基于令牌的 API 设计。
- 令牌管理:用户可以为账户生成多个 API 令牌,每个令牌可以分配特定的权限/作用域。
- 会话认证:利用内置的 Cookie 认证会话,为 SPA 提供认证支持。
2. 自定义模型绑定键名 (Route::model 绑定增强)
-
在路由模型绑定中,除了默认使用
id字段外,现在可以自定义解析模型时使用的字段 (例如username或slug)。 -
示例:在
RouteServiceProvider的boot方法中定义:phppublic function boot() { parent::boot(); Route::model('user', User::class, function ($value) { return User::where('username', $value)->firstOrFail(); }); }
3. HTTP 客户端
-
引入了基于 Guzzle HTTP 客户端的流畅接口,用于发起 HTTP 请求。
-
语法简洁,支持链式调用,内置常用功能(如 JSON 解码、抛出异常)。
-
示例:
php$response = Http::withHeaders([ 'X-First' => 'foo', 'X-Second' => 'bar' ])->post('https://example.com/users', [ 'name' => 'Taylor', ]); if ($response->successful()) { // ... }
4. Castable 接口 (自定义 Eloquent 类型转换)
-
允许开发者创建自定义的 Eloquent 类型转换类。
-
实现
Castable接口的类必须定义一个castUsing方法,该方法返回一个实现了CastsAttributes接口的类。 -
示例:定义自定义的
Json类型转换:phpuse Illuminate\Contracts\Database\Eloquent\Castable; use Illuminate\Contracts\Database\Eloquent\CastsAttributes; class Json implements Castable { public static function castUsing(array $arguments) { return new class implements CastsAttributes { public function get($model, $key, $value, $attributes) { return json_decode($value, true); } public function set($model, $key, $value, $attributes) { return json_encode($value); } }; } }在模型中使用:
phpprotected $casts = [ 'options' => Json::class, ];
5. 路由 URL 生成器增强
-
URL::signedRoute和URL::temporarySignedRoute方法现在支持指定过期时间作为第二个参数(之前是第三个参数),使签名更简洁。 -
示例:
php$url = URL::temporarySignedRoute( 'unsubscribe', now()->addMinutes(30), ['user' => 1] );
6. Blade 组件标签 & 优化
-
组件别名 :可以在单个文件中定义 Blade 组件,并通过
@component指令的别名来引用,简化了使用。php// resources/views/components/alert.blade.php <div class="alert"> {{ $slot }} </div>在
AppServiceProvider注册别名:phppublic function boot() { Blade::component('components.alert', 'alert'); }在视图使用:
php@alert(['type' => 'danger']) You are not allowed to access this resource! @endalert -
组件标签 :引入了更简洁的标签语法
<x-component-name>(Laravel 7.x 开始引入,后续版本继续完善)。php<x-alert type="danger" message="You are not allowed to access this resource!"/>
7. 路由 CORS 配置
- 新增了
HandleCors中间件,允许在config/cors.php文件中集中配置跨域资源共享 (CORS) 策略,取代了之前需要手动添加cors中间件的方式。
8. 测试改进
- 队列 Fake :新增
Queue::fake()方法,允许在测试中模拟队列任务,断言任务是否被派发而不实际执行它们。 - Mail Fake :
Mail::fake()现在可以用于模拟邮件发送,断言邮件是否应发送给特定收件人。 - HTTP 测试 :增强了 HTTP 测试方法,如
assertJsonPath,assertExactJson,assertJsonMissing,assertJsonStructure等,提供更细致的 JSON 响应断言。
9. Artisan 命令改进
artisan test命令:新增了更简洁的命令来运行 PHPUnit 测试。artisan make:factory:可以单独创建工厂文件(之前make:model -f会同时创建模型、迁移和工厂)。
10. 其它优化
stub文件放置位置变更:从resources目录移到stubs目录。markdown邮件模板位置变更:从resources/views/vendor/mail移到resources/views/vendor/mail/html和resources/views/vendor/mail/text。Eloquent优化:firstOrCreate和updateOrCreate等方法现在支持使用闭包定义额外属性。Paginator默认使用Tailwind CSS 分页视图。Symfony组件依赖升级到 Symfony 5.x。
这些特性提升了 Laravel 的开发体验、测试便利性、API 构建能力和代码组织方式。