Laravel 7发行说明( 二)

简介: Laravel 7发行说明( 二)

路由模型绑定优化



路由模型绑定优化由 Taylor Otwell 开发贡献 。


自定义键名



有时你可能希望使用 id 以外的字段来解析 Eloquent 模型。 为此, Laravel 7 允许你在路由参数中指定某个字段:


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


隐式绑定约束



有时,当在路由中隐式绑定多个 Eloquent 模型时,可能希望对第二个 Eloquent 模型进行约束,使其必须是第一个 Eloquent 模型的子类。例如,考虑这种情况,该情况是通过 Slug 为特定用户查找博客文章的:


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


当使用自定义键隐式绑定作为嵌套的路由参数时,Laravel 7 将自动确定查询范围,以使用约定猜测其父级上的关系名称,以其父级检索嵌套模型。在这种情况下,将假定 User 模型关联了名为 posts(路由参数名称的复数) 的关系,该关系可用于检索 Post 模型。


有关路由模型绑定的更多信息,请查阅路由文档。


多邮件驱动程序



多邮件驱动程序支持由 Taylor Otwell 贡献。


Laravel 7 允许为单个应用配置多个邮件驱动。在 mail 配置文件中的每个邮件驱动都拥有它们自己的配置以及自己独特的 「transport」,这允许你的应用使用不同的邮件服务来发送某些邮件。例如,你的应用可以使用 Postmark 发送批量邮件,使用 Amazon SES 发送公务邮件。


默认情况下,Laravel 将使用 mail 配置文件中的 default 选项指定的邮件驱动作为邮件驱动。然而,你可以通过 mailer 方法来使用特定的邮件驱动来发送邮件。


Mail::mailer('postmark')
        ->to($request->user())
        ->send(new OrderShipped($order));


路由缓存速度改进



路由缓存速度改进由上游的 Symfony 的贡献者和 Dries Vints 贡献


Laravel 7 提供了一种新的方法,用于匹配使用 Artisan 命令 route:cache 缓存的已编译缓存路由。在大型应用程序(例如,具有800条或更多路由的应用程序)上,这些改进可以使简单的「Hello World」基准测试每秒的请求速度 提高2倍 ,而无需更改应用程序。


CORS 支持



CORS 支持由 Barry vd. Heuvel 贡献


Laravel 7 通过集成由 Barry vd. Heuvel 编写的受欢迎的 Laravel CORS 软件包,为配置跨域资源共享(CORS) OPTIONS 请求响应提供了官方支持, 默认的 Laravel 应用程序框架 中包含一个新的 cors 配置。


有关 Laravel 7.x 中的 CORS 支持的更多信息,请查阅CORS文档。


查询时类型转换



查询时类型转换由 Matt Barlow 开发贡献.


有时候需要在查询执行过程中对特定属性进行类型转换,例如需要从数据库表中获取数据的时候。举个例子,请参考以下查询:


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


在该查询获取到的结果集中,last_posted_at 属性将会是一个字符串。假如我们在执行查询时进行 date 类型转换将更方便。你可以通过使用 withCasts 方法来完成上述操作:


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


MySQL 8+ 数据库队列改进



MySQL 数据库队列改进由 Mohamed Said 开发贡献.


在先前版本的 Laravel 中, database 队列的健壮性被认为无法满足生产环境的需求。但是,Laravel 7 针对使用基于 MySQL 8+ 数据库队列的应用进行了改进。通过使用 FOR UPDATE SKIP LOCKED 语句进行 SQL 的优化,database 队列驱动可以安全地用于生产环境。


Artisan test 命令



test 命令由 Nuno Maduro 贡献


除了 phpunit命令之外,现在可以使用 test Artisan 命令来运行测试。 Artisan 测试运行器提供了漂亮的控制台,以及有关当前正在运行的测试的更多信息。 此外,运行器将在第一次测试失败时自动停止:


php artisan test


image.png


可以传递给 phpunit 命令的任何参数也可以传递给 Artisan test 命令:


php artisan test --group=feature


Markdown 邮件模板改进



Markdown 邮件模板改进由 Taylor Otwell 贡献


默认的Markdown邮件模板已基于Tailwind CSS调色板做出全新、更现代的设计。 当然,可以根据您的应用程序的需求来发布和定制此模板:


image.png


有关 Markdown 邮件的更多信息,请查看邮件发送.


自定义桩代码



自定义桩代码由 Taylor Otwell贡献


Artisan 控制台的 make 命令用于创建各种类,例如控制器,任务,迁移和测试。 这些类是根据输入填充值使用「桩代码」生成文件的。 但是,有时可能希望对 Artisan 生成的文件进行小的更改。 为此,Laravel 7提供了 stub:publish 命令来发布最常见的自定义桩代码:


php artisan stub:publish


发布的桩代码将位于应用程序根目录中的 stubs 目录中。 当使用 Artisan 的 make 命令生成它们的相应类时,对这些桩代码所做的任何更改都会反映出来。


队列maxExceptions配置



maxExceptions属性由Mohamed Said提交贡献.


有时可能希望指定可以尝试多次的任务,但是如果重试是由给定数量的异常触发的,则该任务将失败。在Laravel7中,可以在任务类上定义 maxExceptions 属性:


<?php
namespace App\Jobs;
class ProcessPodcast implements ShouldQueue
{
    /**
     * 任务可以被重试的次数。
     *
     * @var int
     */
    public $tries = 25;
    /**
     * 失败之前允许抛出异常的最大次数。
     *
     * @var int
     */
    public $maxExceptions = 3;
    /**
     * 执行任务。
     *
     * @return void
     */
    public function handle()
    {
        Redis::throttle('key')->allow(10)->every(60)->then(function () {
            // 获取锁,处理博客进程...
        }, function () {
            // 无法获取锁...
            return $this->release(10);
        });
    }
}


在此示例中,如果应用程序无法获得 Redis 锁,则该任务将释放十秒钟,并将继续重试 25 次。但是,如果任务抛出三个未处理的异常,则该任务将失败。


目录
相关文章
|
3月前
|
JavaScript 前端开发 Shell
谷歌 zx 脚手架模块中文文档
谷歌 zx 脚手架模块中文文档
99 0
|
5月前
|
JavaScript 前端开发 程序员
从零开发和发布自己的wordpress插件到官方插件库完全指南
wordpress是一款很流行的开源博客程序,全世界有很多网站都在使用wordpress,程序员们也喜欢拿来做自己的技术博客,对于自己不满意的地方,那肯定也需要自己动手来修改了,下面就介绍从开发到发布一个wordpress插件的完整流程
61 0
|
JSON 安全 测试技术
Laravel 7发行说明( 一)
Laravel 7发行说明( 一)
176 0
Laravel 7发行说明( 一)
|
移动开发 前端开发 JavaScript
ReactNative0.63正式版发布:LogBox
ReactNative0.63正式版发布:LogBox
221 0
ReactNative0.63正式版发布:LogBox
|
存储 IDE 前端开发
微软悄悄发布了 Web 版的 VsCode
大家好,我是零一 在8月31日,微软发了一个介绍他们新发布的功能的帖子介绍,这个新东西就是——Web版的Vscode,不过现在已经找不到那个帖子了,点进去似乎已经404了,估计是他们发早了,不过这也说明不久后他们就会重新发布,敬请期待~
639 0
微软悄悄发布了 Web 版的 VsCode
|
PHP iOS开发 API
thinkphp整合系列之苹果AppStore内购付款的服务器端php验证
这里要讲的就是AppStore内购的服务器端验证;在app中支付的过程那是由IOS程序猿完成的;IOS会把支付凭证发给我们;作为服务器端;我等php需要做的就是对支付结果的验证;thinkp...
1643 0
|
JavaScript Ubuntu 区块链
区块链开发(四)Nodejs下载&安装
区块链开发(四)Nodejs下载&安装
188 0
区块链开发(四)Nodejs下载&安装
|
监控 前端开发 PHP
PHP框架 Raxan 1.0 最终版发布
Raxan for PHP是一个强大的Web应用开发框架,它使用的网络设置有关的技术能够为建设RIA,跨平台的Ajax应用程序的集成解决方案。它允许创建数据库驱动的应用程序,互动的网站建设,以提高用户体验,服务器监控,通过Ajax的连接,多语种界面端应用程序的变化,等等。
784 0
|
JavaScript 前端开发