Laravel 7.x 新特性全解析
·
好的,Laravel 7.x 版本引入了多项重要特性和改进,旨在提升开发体验、性能和应用功能。以下是其主要特性概述:
1. 路由模型绑定优化
- 支持自定义路由模型绑定键名。开发者可以更灵活地指定模型解析所使用的字段(而不仅仅是
id)。 - 示例:
```php
// 在路由服务提供者中定义
public function boot()
{
Route::model('user', User::class, function() {
return $this->where('status', 'active')->firstOrFail();
});
}
```
```php
// 或者在模型上定义 getRouteKeyName 方法
public function getRouteKeyName()
{
return 'slug';
}
```
2. 自定义模型序列化
- 允许开发者自定义模型在数组或 JSON 序列化时的格式。
- 通过覆盖模型上的
serializeDate方法来实现。
```php
protected function serializeDate(\DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
```
3. Blade 组件增强
- 匿名组件:允许将 Blade 模板片段定义为可重用的组件,而无需创建单独的类文件。
```blade
<!-- resources/views/components/alert.blade.php -->
<div class="alert alert-danger">
{{ $slot }}
</div>
```
使用:
```blade
<x-alert>
这是一条错误消息!
</x-alert>
```
- 组件标签:提供更简洁的语法来使用组件 (
<x-component-name/>)。 - 动态组件:支持通过变量名渲染组件 (
<x-dynamic-component :component="$componentName" />)。
4. HTTP 客户端
- 引入了一个基于 Guzzle 的、流畅的 HTTP 请求库。
- 提供优雅的语法发起 GET、POST、PUT、PATCH 和 DELETE 请求,并处理响应。
```php
use Illuminate\Support\Facades\Http;
$response = Http::get('https://api.example.com/users');
if ($response->ok()) {
$users = $response->json();
}
```
- 支持请求宏、中间件、重试逻辑、并发请求等高级功能。
5. 多用户认证
Auth门面新增guard方法,方便在需要时指定使用的看守器。
```php
Auth::guard('admin')->attempt($credentials);
```
6. CORS 支持
- 内置对跨域资源共享的支持。
- 可以通过配置文件
config/cors.php来定义全局的 CORS 策略。
7. 路由缓存改进
- 路由缓存现在支持闭包路由。这意味着即使应用中使用了闭包路由,也可以使用
route:cache命令来缓存路由,显著提升性能。
8. Eloquent 新方法
firstWhere:查找匹配条件的第一个记录。
```php
$user = User::firstWhere('email', 'example@mail.com');
```
is/isNot:用于模型比较。
```php
if ($user->is($anotherUser)) {
// ...
}
```
9. 邮件功能增强
- 邮件模板预览:新增
mail: previewArtisan 命令,可在浏览器中预览邮件模板,无需发送真实邮件。 - 可邮件通知:改进了邮件通知的渲染方式。
10. Artisan 命令增强
* `test` 命令:新增 `--parallel` 选项以并行运行 PHPUnit 测试(需要 `paratest` 包)。
* `model` 命令:生成模型时支持 `--factory`、`--seed`、`--migration` 等选项。
11. 分页器定制
* 允许开发者自定义分页视图(如 Bootstrap 4、Tailwind 等),而不再仅限于默认的 Bootstrap 3 视图。
* 通过 `php artisan vendor:publish --tag=laravel-pagination` 发布视图后进行修改。
12. stub:publish 命令
* 新增 `stub:publish` Artisan 命令,用于发布框架的默认存根文件(如控制器、模型、迁移等的模板)。
* 方便开发者统一自定义项目中的生成文件模板。
13. has 和 whereHas 增强
* 支持使用闭包定义更复杂的关联查询约束。
```php
User::whereHas('posts', function ($query) {
$query->where('votes', '>', 10);
})->get();
```
14. Arr::undot() 和 Str::of()
* `Arr::undot()`:将使用点表示法的一维数组转换为多维数组。
* `Str::of()`:提供流畅的字符串操作对象(类似于 `Illuminate\Support\Stringable`)。
```php
$string = Str::of('Hello World')->lower()->replace('world', 'Laravel')->trim();
```
15. 弃用通知
* 开始标记一些将在未来版本中移除的功能,开发者需注意并逐步迁移代码(如某些全局辅助函数、部分 Blade 语法等)。
Laravel 7.x 的这些特性极大地增强了开发便利性、代码组织能力以及与外部服务交互的能力,同时保持了框架的优雅和高效。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)