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: preview Artisan 命令,可在浏览器中预览邮件模板,无需发送真实邮件。
  • 可邮件通知:改进了邮件通知的渲染方式。

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. haswhereHas 增强

复制代码
*   支持使用闭包定义更复杂的关联查询约束。
  ```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 的这些特性极大地增强了开发便利性、代码组织能力以及与外部服务交互的能力,同时保持了框架的优雅和高效。

相关推荐
MeAT ITEM21 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
molihuan21 小时前
最新 将 MuPDF 编译到 Android 动态库 PDF解析渲染引擎
android·pdf
Rick199321 小时前
mysql 慢查询怎么快速定位
android·数据库·mysql
2301_771717211 天前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
dvjr cloi1 天前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
随遇丿而安1 天前
第2周:`EditText` 不只是输入框,它是 Android 输入体验的第一道门
android
我命由我123451 天前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
一起搞IT吧1 天前
Android性能系列专题理论之十:systrace/perfetto相关指标知识点细节含义总结
android·嵌入式硬件·智能手机·性能优化
小书房2 天前
Kotlin的by
android·开发语言·kotlin·委托·by
jinanwuhuaguo2 天前
(第二十八篇)OpenClaw成本与感知的奇点——从“Token封建制”到“全民养虾”的本体论地基
android·人工智能·kotlin·拓扑学·openclaw