Laravel 7.x 十大新特性解析

好的,Laravel 7.x 版本引入了一些重要的新特性和改进,以下是其主要特性概述:

1. Laravel Airlock (Sanctum)

  • 轻量级 API 认证系统:专为 SPA (单页应用)、移动应用和简单的基于令牌的 API 设计。
  • 令牌管理:用户可以为账户生成多个 API 令牌,每个令牌可以分配特定的权限/作用域。
  • 会话认证:利用内置的 Cookie 认证会话,为 SPA 提供认证支持。

2. 自定义模型绑定键名 (Route::model 绑定增强)

  • 在路由模型绑定中,除了默认使用 id 字段外,现在可以自定义解析模型时使用的字段 (例如 usernameslug)。

  • 示例:在 RouteServiceProviderboot 方法中定义:

    php 复制代码
    public 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 类型转换:

    php 复制代码
    use 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);
                }
            };
        }
    }

    在模型中使用:

    php 复制代码
    protected $casts = [
        'options' => Json::class,
    ];

5. 路由 URL 生成器增强

  • URL::signedRouteURL::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 注册别名:

    php 复制代码
    public 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 FakeMail::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/htmlresources/views/vendor/mail/text
  • Eloquent 优化:firstOrCreateupdateOrCreate 等方法现在支持使用闭包定义额外属性。
  • Paginator 默认使用Tailwind CSS 分页视图。
  • Symfony 组件依赖升级到 Symfony 5.x。

这些特性提升了 Laravel 的开发体验、测试便利性、API 构建能力和代码组织方式。

相关推荐
A-刘晨阳8 小时前
AI原生时序数据库选型指南:从数据存储到智能决策的范式跃迁
数据库·时序数据库·ai-native
HalvmånEver9 小时前
MySQL的增删改查命令合集合集
数据库·sql·oracle
不剪发的Tony老师10 小时前
dblab:一款基于终端的交互式数据库客户端
数据库·sql
xwz小王子10 小时前
Science Robotics基础模型正在改写机器人集群的“游戏规则”
数据库·人工智能·机器人
茉莉玫瑰花茶10 小时前
LangGraph 介绍
服务器·网络·数据库
倒霉蛋小马11 小时前
【Redis】利用Redis构造全局唯一ID
数据库
夕除11 小时前
springboot--06
数据库·spring boot·mybatis
2401_8330336211 小时前
golang如何实现MQTT主题通配符路由_golang MQTT主题通配符路由实现策略
jvm·数据库·python
运维小子12 小时前
JumpServer Applet 发布自定义远程应用:Oracle SQL Developer 自动登录
数据库·sql·oracle·jumpserver