Laravel 7 发布在即,过来看下有哪些新功能

Laravel

Laravel 7 的正式发布日期为 2020年3月3日。根据 Laravel Framework 每6个月的主要 laravel 版本发布策略(2月和 8月),它是另一个主要版本。它不是 LTS 版本,因此根据 Laravel 版本支持政策,他们提供 2020年9月3日之前的 6个月错误修复,以及直到 2021年3月3日之前的 1年安全问题修复支持。让我们看一下 Laravel 7 的新功能和改进。

Laravel 7的新功能

  • Laravel Airlock
  • 适用于 HTTP 客户端的 Zttp
  • CORS 支持
  • 自定义 Eloquent Cast
  • 流畅的字符串操作
  • Blade X
  • 可定制的 Stubs
  • 查询时间转换
  • 多个邮件驱动程序
  • 新 Artisan 命令

Laravel 7 中的改进

  • 路由模型绑定改进
  • 2倍更快的路由
  • 数据库队列改进
  • Markdown 邮件模板改进
  • 以及更多的错误修复和改进。

Laravel Airlock

Laravel Airlock 是用于API身份验证的官方软件包。它提供了简单的令牌基础 API 身份验证,令牌发行,令牌能力,移动应用程序身份验证等。

HTTP客户端的Zttp

使用 Zttp,向 API 发出 HTTP 请求将是更好,更简洁的方法。

发布请求

<?php
use Illuminate\Support\Facades\Http;

$response = Http::post($url);

$response = Http::post($url, [
    'site' => 'Laravel Article',
]);

获取响应

$response = Http::get($url);
$response = Http::get($url,['foo'=>'bar']);

带请求头

$response = Http::withHeaders(['foo' => 'bar'])->post($url, [
    'baz' => 'qux',
]);

响应

$response['foo']
$response->body()
$response->json()
$response->status()
$response->ok()

CORS 支持

现在 Laravel 7 开箱即用地支持 CORS (跨域资源共享)。 你应该更了解每个开发者在 API 开发中都遇到过 CORS 问题。现在,Laravel 7 使用配置值自动响应 OPTION 请求。Laravel 7 开箱即用的 HandleCors 中间件可以搞定一切。

自定义 Eloquent Cast

Laravel 7 中的自定义 eloquent casting 是另一个很酷的功能。此功能将使您能够添加自定义 casts。让我们看一下 JSON Caster。

<?php

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

class Json 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);
    }
}

现在,我们可以在模型中使用自定义的 eloquent cast 了。

<?php

namespace App;

use App\Casts\Json;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{

    protected $casts = [
        'extra' => Json::class,
    ];
}

流畅的字符串操作

在 Laravel 7 中,您可以使用 Illuminate\Support\Str 类来做更多更酷的面向对象的事情。

$currentVersion = (string) Str::of('  Laravel 6.x ');
return $currentVersion->trim()
        ->replace('6.x', '7.x')
        ->slug();

// laravel-7x

Blade X

Laravel 7 Blade X 功能使您能够制作 class-less 的组件。

生成 x-component

@php($user = $user ?? Auth::user())
@php($size = $size ?? 50)

<img
    class="inline-block rounded-full"
    src="{{ $user->gravatarUrl($size) }}"
    width="{{ $size }}"
    height="{{ $size }}"
/>

Blade x 用法

<x-avatar/>
<x-avatar size="40" />
<x-avatar size="100" />

自定义 Stubs

现在,您可以使用 artisan 命令在 Laravel 7.x 中自定义 stubs。

php artisan stub:publish

查询时间转换

Laravel 7 提供了 withCasts 方法,可帮助您在运行查询时强制转换值。让我们举个例子。

$users = User::select([
    'users.*',
    'last_posted_at' => Post::selectRaw('MAX(created_at)')->whereColumn('user_id', 'users.id')
])
->withCasts(['last_posted_at' => 'date'])
->get();

多个邮件驱动程序

Laravel 7 将允许您使用单个应用程序设置多个邮件驱动程序。

Mail::mailer('noreply')
        ->to($request->user())
        ->send(new PostUpdated($post));

新 Artisan 命令

Laravel 7 中添加了一个新的 artisan 测试命令。新的 artisan 测试命令为您提供了精美的 UX 和有关测试的有用信息。

php artisan test

Laravel 7 中的改进

  • 路由模型绑定改进
  • 2倍更快的路由
  • 数据库队列改进
  • Markdown 邮件模板改进
  • 以及更多的错误修复和改进。

路由模型绑定改进

自定义 Key

默认情况下,路由模型绑定与 id 字段一起使用。现在您可以自定义它。

Route::get('posts/{post:slug}', function (App\Post $post) {
    return $post;
});

自动作用域

Laravel 7 将使用其辨别惯例使用的方法来确认程序中的关系调用,从而自动确定查询的范围以检索嵌套模型。

use App\Post;
use App\User;

Route::get('api/users/{user}/posts/{post:slug}', function (User $user, Post $post) {
    return $post;
});

2倍更快的路由

使用 route:cache 时,Laravel 7 的路由匹配性能比 laravel 6 快 2倍

数据库队列改进

Laravel 7 对使用 MySQL 8+ 作为数据库支持队列的应用程序进行了改进。

Markdown 邮件模板改进

使用 Tailwind CSS 调色板,邮件的默认 markdown 模板外观更加新颖。可以根据需要发布和自定义模板。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravelarticle.com/laravel-airlo...

译文地址:https://learnku.com/laravel/t/40981

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 27

laravel6还在项目上没用过,卧槽,

4年前 评论

原文有误: “1-year security issues fix support until March 3rd, 2020”, 1年安全问题修复支持,应该是 March 3rd, 2021

4年前 评论
Epona

cors 好评,不用再自己写或者用第三方包了😂。

Str 类也好评

4年前 评论

laravel 官方会整合swoole的话 就牛逼了

4年前 评论

@yzbfeng 慎用吧,前阵子swoole商业版的事不是弄得很大

4年前 评论
anniversary 4年前
_杭城浪子 4年前
小李世界 4年前

看来我的 php artisan test 要改名了

4年前 评论

那我的laravel6,是学还是不学了

4年前 评论
Imuyu 4年前

Airlock ? passport 不要了?

4年前 评论
Imuyu 4年前

@qinplain 我现在用的还是5.5……

4年前 评论
Jennie

真好 我很喜欢 :blush:

4年前 评论

Airlock 有点香

4年前 评论

最大最大的亮点在API上!现在API尽然可以这么写了!

use App\Post; use App\User;

Route::get('api/users/{user}/posts/{post:slug}', function (User $user, Post $post) { return $post; });

这样写有点牛逼

4年前 评论

Zttp确实好用,调用api方便的很 就是Zttp没有文档,作者说要什么文档大家去看test就好了 :joy:

4年前 评论

我就想知道,这些特性在Laravel6上会不会跟进?

4年前 评论

@jobsssss 内存不够就加内存啊

4年前 评论

哈哈哈,今天还在想入手下6,没想到7来了

4年前 评论

现在每次来社区,都是版本更新,害怕.jpg

4年前 评论

“分”久必合的节奏 :grin:

4年前 评论

自定义 Eloquent Cast好评

用整数存储价格 转换名字之类 如果字段多 就会变得麻烦 (模型修改器要太多代码了)
file

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!