Laravel 10.13版本发布
Laravel  /  管理员 发布于 1年前   462
本周, Laravel团队发布了v10.13,在语法中加入了数据库转义功能,睡眠测试钩子,响应准备事件,以及更多:
Hash isHashed()方法
Günther Debrauwer贡献了一个isHashed()方法, 封装了本地的password_get_info()调用,
它可以确定一个字符串是否已经被哈希化:
Hash::isHashed($value); // bool
这意味着这个方法可以被模拟,并且没有被锁定在password_get_info()函数的调用上以确定散列。
语法中的逃逸功能
Tobias Petry之前贡献了具有语法特定格式的数据库表达式,现在又在语法类中加入了转义功能:
> 为了解决这个问题,我提出了一个解决方案,
增加对数据库语法的支持,以转义任何值,安全地嵌入到SQL查询中。
PHP通过PDO::quote方法原生提供了这个功能。
单个连接实例(即PostgresConnection)实现了数据库特定的转义,
这意味着你不必使用原始的特定驱动程序查询来转义数值:
// Taken from the Postgres escaping tests
$this->assertSame(
"'\\xdead00beef'::bytea",
$this->app['db']->escape(hex2bin('dead00beef'), true)
);
$this->assertSame(
'3.14159',
$this->app['db']->escape(3.14159)
);
$this->assertSame(
'-3.14159',
$this->app['db']->escape(-3.14159)
);
$this->assertSame(
"'Hello''World'",
$this->app['db']->escape("Hello'World")
);
请查看Pull Request #46558,了解完整的细节、实现和围绕这些概念的讨论。
提供睡眠测试钩子
Tim MacDonald 贡献了注册回调的能力,以便在测试中睡眠时执行:
// Implementation example from the PR:
$timeout = now()->addMinute();
do {
if (Work:attempt()) {
return;
}
Sleep::for(100)->milliseconds();
} while (now()->isAfter($timeout));
// Test code
$this->freezeTime();
Sleep::fake();
Sleep::whenFakingSleep(fn (Interval $duration) => $this->travel(
$duration->totalMilliseconds
)->milliseconds());
// run test code.
Sleep::assertSlept();
有效地,我们可以进步now()值,以确保我们的实现是按预期工作的。更多细节请参见Pull Request #47228。
额外的状态代码断言
Volodya Kurshudyan 贡献了一些状态代码断言的便利性,它们是直接断言状态代码的替代品:
$response->assertNotModified();
$response->assertTemporaryRedirect();
$response->assertPermanentRedirect();
$response->assertNotAcceptable();
这些方便的方法在 "这是否应该在框架中出现?"方面可能会有争议。
你可以不使用它们,而使用$response->assertStatus(308)代替。
在事件中包装响应准备
Tim MacDonald贡献了新的响应事件,以挖掘准备和准备好响应之后的时刻。这允许一些有趣的能力,
比如在PreparingResponse和ResponsePrepared事件之间记录查询。
如下图所示,如果在PreparingResponse期间有任何查询被执行,
你可以抛出一个异常,或者在生产中把它们记录出来:
$logQueries = false;
Event::listen(PreparingResponse::class, function () use (&$logQueries) {
$logQueries = true;
});
Event::listen(ResponsePrepared::class, function () use (&$logQueries) {
$logQueries = false;
});
DB::listen(function (QueryExecuted $event) use (&$logQueries) {
if ($logQueries) {
// log in production, throw locally.
}
});
参见Pull Request #45603,以了解这些事件背后的想法的更多细节,如在响应准备期间防止查询,视图渲染等。
发布说明
你可以在GitHub上看到以下完整的新功能和更新列表以及10.12.0和10.13.0之间的差异。
下面的发布说明直接来自更新日志:
https://github.com/laravel/framework/compare/v10.12.0...v10.13.0
https://github.com/laravel/framework/blob/693e0c790ed61f78ac75cb1445df8362f6606a3c/CHANGELOG.md#v10130-2023-05-30
v10.13.0
新增
新增 Illuminate/Hashing/HashManager::isHashed() (#47197)
语法中的逃逸功能(#46558)
在 Illuminate/Support/Sleep.php 中提供测试钩子 (#47228)
为AssertsStatusCodes添加缺失的方法(#47277)
在事件中包裹响应准备 (#47229)
修正了
修正了函数包裹相关工厂定义时的错误 (#47168)
修复了报告和渲染方法之间的不一致(#47201)
修正了Model::isDirty()在AsCollection或AsEncryptedCollection有参数时的问题 (#47235)
修正了JSON_CONTAINS的转义字符串(#47244)
修复了ProcessFailedException异常的输出缺失(#47285)。
已更改
删除无用的else语句(#47186)
RedisStore的改进--除非所有的值都是可序列化的,否则不打开事务(#47193)
使用 carbon::now() 在 takeUntilTimeout lazycollection-method 中获取当前时间戳 (#47200)
合并时避免可见/隐藏的重复(#47264)
在CompilesClasses中添加一个缺失的分号(#47280)
向InvalidPayloadException发送沿用值(#47223)
转:
https://laravel-news.com/laravel-10-13-0
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号