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 次。但是,如果任务抛出三个未处理的异常,则该任务将失败。


目录
相关文章
|
2月前
|
Web App开发 移动开发 前端开发
uniapp环境H5运行及发行(入门必学)
uniapp环境H5运行及发行(入门必学)
239 5
|
5月前
|
PHP 开发者
PHP框架中Laravel排名?
【7月更文挑战第2天】PHP框架中Laravel排名?
38 0
|
JavaScript 前端开发 程序员
从零开发和发布自己的wordpress插件到官方插件库完全指南
wordpress是一款很流行的开源博客程序,全世界有很多网站都在使用wordpress,程序员们也喜欢拿来做自己的技术博客,对于自己不满意的地方,那肯定也需要自己动手来修改了,下面就介绍从开发到发布一个wordpress插件的完整流程
166 0
|
自然语言处理 API Python
喜大普奔!Django官方文档终于出中文版了
之前对于 Django 的学习我一直推荐看官方文档,但不得不加上一句“如果你英语水平允许的话……”。现在总算是等来好日子了。各位想向网站/服务器开发方向进阶的同学不要错过,这份官方文档的价值绝对超过市面上任何一本 Django 教材。
|
开发框架 JavaScript 安全
基于Thinkphp的开源管理系统
基于Thinkphp的开源管理系统
244 0
基于Thinkphp的开源管理系统
|
XML 前端开发 安全
Laravel安装指南
Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。
570 0
|
JSON 安全 测试技术
Laravel 7发行说明( 一)
Laravel 7发行说明( 一)
228 0
Laravel 7发行说明( 一)
|
PHP
【laravel】安装
【laravel】安装
146 0
【laravel】安装
|
SQL 缓存 API
基于Laravel的国产开源CMS,支持Swoole,含API接口
MyCms是一款基于Laravel开发的开源免费的自媒体博客CMS系统,适用于个人网站及企业网站开发使用。MyCms基于Apache2.0开源协议发布,免费且不限制商业使用,欢迎持续关注我们。
453 0
|
开发框架 API PHP
Phper必备的50个开源开发包
2019年最受欢迎的50个PHP开源项目,汇智网翻译整理。 如果希望快速掌握区块链应用的开发,推荐汇智网的 区块链应用开发系列教程, 内容涵盖比特币、以太坊、eos、超级账本fabric和tendermint等多种区块链, 以及php、 java、go、nodejs、python、dart等多种开发语言 1、Laravel Laravel是一个为Web开发者打造的PHP开发框架。
1760 0