Laravel 团队昨天发布了 v7.7.0,其中包含容器支持的构造函数支持可变参数,一些新的 HTTP 客户端功能,Blueprint 新增 rawIndex() 方法以及 7.x 分支中的所有最新功能,修复和更改 :
Daniel Mason 贡献了 HTTP 客户端支持数组的功能:
Http::get(‘http://foo.com‘, [‘foo‘ => ‘bar‘]);
Http::assertSent(function (Request $request) {
return $request->url() === ‘http://foo.com/get?foo=bar‘
&& $request[‘foo‘] === ‘bar‘;
});
Christoph Rumpel 为 HTTP 客户端新增了 assertSentCount 断言,这对断言发送的预期请求值很有用:
$this->factory->fake();
$this->factory->assertSentCount(0);
$this->factory->post(‘http://foo.com/form‘, [
‘name‘ => ‘Taylor‘,
]);
$this->factory->assertSentCount(1);
$this->factory->post(‘http://foo.com/form‘, [
‘name‘ => ‘Jim‘,
]);
$this->factory->assertSentCount(2);
Jonathan Reinink 贡献了 rawIndex 方法, 允许我们使用自定义 SQL 表达式创建索引:
// Before
Schema::create(‘users‘, function (Blueprint $table) {
$table->id();
$table->string(‘name‘);
$table->date(‘birth_date‘)->nullable();
$table->timestamps();
});
DB::statement(‘ALTER TABLE users ADD INDEX birthday_index ((date_format(birth_date, "%m-%d")))‘);
// After
Schema::create(‘users‘, function (Blueprint $table) {
$table->id();
$table->string(‘name‘);
$table->date(‘birth_date‘)->nullable();
$table->timestamps();
$table->rawIndex(‘(date_format(birth_date, "%m-%d"))‘, ‘birthday_index‘);
});
Beau Simensen 为容器新增了可变参数功能,下面是个简单的使用案例:
// Before
app()->singleton(Logger::class, MyLogger::class);
app()->bind(Firewall::class, function ($c) {
return new Firewall(
$c->make(Logger::class),
...[
$c->make(NullFilter::class),
$c->make(ProfanityFilter::class),
$c->make(TooLongFilter::class),
]
);
});
// After
app()->singleton(Logger::class, MyLogger::class);
app()
->when(Firewall::class)
->needs(Filter::class)
->give([
NullFilter::class,
ProfanityFilter::class,
TooLongFilter::class,
]);
就像 pull request 中的描述一样, 您也可以将闭包传递给 give 方法:
app()->singleton(Logger::class, MyLogger::class);
app()
->when(Firewall::class)
->needs(Filter::class)
->give(function ($c) {
return [
$c->make(NullFilter::class),
$c->make(ProfanityFilter::class),
$c->make(TooLongFilter::class),
];
});
pull request 包含所有详细信息,和其他可以解决的问题。
Matt Kingshott 为 HTTP 客户端 新增了 hasHeaders() 方法,该方法可以让您使用一些语法糖检查存在的请求头或值:
$headers = [
‘X-Test-Header‘ => ‘foo‘,
‘X-Test-ArrayHeader‘ => [‘bar‘, ‘baz‘],
];
Http::withHeaders($headers);
// ...
Http::assertSent(function ($request) use ($headers) {
return $request->hasHeaders($headers);
});
您可以在 Github 查看一些新的功能和 7.6.0 和 7.7.0 之间的区别。完整的发行说明可以在 v7 changelog 看到:
Illuminate\Http\Client\Factory::assertSentCount() (#32407)Illuminate\Database\Schema\Blueprint::rawIndex() (#32411)storage:link 命令新增 --relative 参数 (#32457, 24b705e)column key (#32449)Illuminate\Http\Client\Request::hasHeaders() (#32462)MorphPivot::delete() 功能 BUG (#32421)Illuminate\Support\Stringable::isEmpty() (#32447)whereNull/whereNotNull 支持 MySQL 的 json 字段 (#32417, d3bb329)Collection::orderBy() 使用回调 (#32471)CompiledRouteCollection 重新启用 Router::newRoute() (#32416)Illuminate\Queue\InteractsWithQueue.php::$job 为 public (2e272ee)
原文地址:https://laravel-news.com/laravel-7-7-rel...
译文地址:https://learnku.com/laravel/t/43581
更多学习内容请访问:
腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)
原文:https://www.cnblogs.com/a609251438/p/12760514.html