侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Laravel 9.12版本发布

Laravel  /  管理员 发布于 1年前   396

Laravel团队发布了9.12版本,其中包含延迟每个通道的通知、跨通道共享日志上下文、在测试时防止杂散的 HTTP 请求等等:


基于闭包的异常测试

Karel Faille 贡献了 assertThrows() 方法,使用闭包测试异常处理的方法:

// 确保抛出异常
$this->assertThrows(fn () => throw Exception(''));
// 确保抛出特定类型的异常
$this->assertThrows(
    fn () => (new SomeActionThatThrowsExceptions)->execute(),
    CustomException::class
);
// 确保抛出带有特定消息的异常
$this->assertThrows(fn () => throw Exception('My message'), Exception::class, 'My message');


强制在测试中伪造HTTP请求

Tim MacDonald 贡献了使用 Laravel 的 HTTP 客户端强制伪造所有 HTTP 请求。

如果测试中没有伪造 HTTP 请求,则测试将抛出异常:

protected function setUp(): void
{
    parent::setUp();
    Http::preventStrayRequests();
}
public function testItDoesTheThingWithoutFaking(): void
{
    $this->post('endpoint-that-utilises-the-http-facade');
   // RuntimeException:在没有匹配伪造的情况下尝试向 [https://acme.com] 请求。
   /* ... */
}


"Throw IF"HTTP客户端方法

@denniseilander为HTTP客户端贡献了一个 throwIf() 方法,如果条件为 true 则抛出异常:

// 抛出 RequestException 异常
return Http::baseUrl('https://foo.bar')
       ->throwIf(true)
       ->get('not-found');
// 不抛出
return Http::baseUrl('https://foo.bar')
       ->throwIf(false)
       ->get('not-found');


允许将 Key/Value数组传递给Artisan选项和参数

Jesper Noordsij将key/value数组传递给Artisan命令上的getArguments和getOptions为了稍微简单的接口。

// 此外,可以跳过你不想使用的那些,而不是 providing/copying 默认值
// 例如:
public function getArguments()
{
    return [
        ['name' => 'argument', 'default' => 'default']
    ];
    // which previously would have been...
    // return [
    //     ['argument', null, '', 'default']
    // ];

请参见 Pull Request #42268 了解更多详情。


更多新的条件方法

Patrick O'Meara 贡献了 whereMorphedTo 和 orWhereMorphedTo 方法。

以下是一个来自 PR 测试的例子:

$model = new EloquentBuilderTestModelParentStub;
$this->mockConnectionForModel($model, '');
$relatedModel = new EloquentBuilderTestModelCloseRelatedStub;
$relatedModel->id = 1;
$builder = $model->whereNotMorphedTo('morph', $relatedModel);
$this->assertSame('select * from "eloquent_builder_test_model_parent_stubs" where not ("morph_type" = ? and "morph_id" = ?)', $builder->toSql());
$this->assertEquals([$relatedModel->getMorphClass(), $relatedModel->getKey()], $builder->getBindings());

查看 Pull Request #42264 了解更多详情。


跨通道和堆栈共享日志上下文

Tim MacDonald 贡献了跨所有日志通道共享上下文信息:

// In a service provider...
public function boot()
{
    Log::shareContext([
        'invocation-id' => (string) Str::uuid(),
    ]);
}


每个通道延迟通知

你可以向延迟方法传递一个数组,以指定特定通道的延迟量:

$user->notify((new InvoicePaid($invoice))->delay([
    'mail' => now()->addMinutes(5),
    'sms' => now()->addMinutes(10),
]));

你也可以在 notification 类中定义一个 withDelay 方法:

/**
 * Determine the notification's delivery delay.
 *
 * @param  mixed  $notifiable
 * @return array
 */
public function withDelay($notifiable)
{
    return [
        'mail' => now()->addMinutes(5),
        'sms' => now()->addMinutes(10),
    ];
}


发行说明

你可以在下面看到新的功能和更新,以及在 GitHub 看 9.11.0 和 9.12.0 之间的差异。以下发行说明直接来自 changelog:

https://github.com/laravel/framework/compare/v9.11.0...v9.12.0
https://github.com/laravel/framework/blob/25127ba88d9a5419ea7a3e99829284e21f7194f2/CHANGELOG.md#v9120---2022-05-10

v9.12.0

新增

新增基于闭包的异常测试 (#42155)
允许通过强制 Http 客户端发出的请求被伪造 (#42230)
新增 'throwIf' 方法到 PendingRequest (#42260)
允许传递 key/value 数组给 getArguments 和 getOptions 方法 (#42268)
新增 whereNotMorphedTo, orWhereNotMorphedTo (#42264)
新增扩展本地数组生成方法 (#42275)
新增基于应通知实例 (#42239)
新增 Illuminate/Pagination/CursorPaginator::onLastPage () (#42301)
新增 findOr 方法到 Query/Builder (#42290)

已修复

修复推送式广播频道过多的问题 (#42287)
修复 Str::Mask () 用于重复字符 (#42295)
修复 EventFake::assertListening () 用于断言基于字符串的观察者侦听器 (#42289)
修复松散比较导致值无法保存的问题 (#41337)
修复 Digits_between 规则的多个点 (#42330)

已更改

启用在使用 beforeSending () 回调时修改 HTTP 客户端请求头 (#42244)
使限制锁获取重试可配置为并发限制器 (#42242)
推迟工厂可调用的扩展 (#42241)
添加 wherehas 软删除作用域 (#42100)
改进密码检查 (#42248)
当使用 forceCreate 在 HasOne 和 HasMany 关系时设置父关系关联的 key (#42281)
确保 phpredis 和 predis 驱动程序之间的前缀覆盖行为相同 (#42279)
跨通道和堆栈共享日志上下文 (#42276)

转:

https://laravel-news.com/laravel-9-12-0

  • 上一条:
    go语言中实现把数据写入文件函数WriteFile()编写
    下一条:
    Laravel角色和权限:拦截器Gates和策略Policies的解释
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel 10.13版本发布(0个评论)
    • 在laravel中介绍一个生成假数据的PHP库:FakerPHP(0个评论)
    • 在laravel框架中对环境配置文件的加载过程步骤浅析(0个评论)
    • Laravel 10.12版本发布(0个评论)
    • 在laravel中以curl的方式请求京东联盟api获取数据流程步骤(0个评论)
    • 近期文章
    • Laravel 10.13版本发布(0个评论)
    • 在github创建task的同时创建分支流程步骤(0个评论)
    • 在go语言中以邮件标题中获取SPF和DMARC,来判断是否为垃圾邮件之垃圾邮件过滤器功能实现(0个评论)
    • 在go语言中使用attr字段标签提取XML属性数据示例(0个评论)
    • 在laravel中介绍一个生成假数据的PHP库:FakerPHP(0个评论)
    • 在laravel框架中对环境配置文件的加载过程步骤浅析(0个评论)
    • Laravel 10.12版本发布(0个评论)
    • 在go语言中如何记录每个HTTP请求到你的Web服务器、日志记录器?(0个评论)
    • 在Go语言中如何查找一个IP地址的网络地址?(0个评论)
    • ELK + Filebeat 搭建日志系统流程步骤(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-01
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客