Laravel v11.0.3 まとめ
30minで読めるだけ読んだので、全部のリリースはまとめきれてないこともあります。
リリースノートはこちら
- [11.x] Arr helper map spread by @bilfeldt in #50474
- [11.x] add list rule by @medilies in #50454
- [11.x] Fixes installation of passport by @nunomaduro in #50488
[11.x] Arr helper map spread by @bilfeldt in #50474
CollectionのmapSpreadというメソッドをArrヘルパーに実装したらしい。
そもそもmapSpreadを使ったことがないのでドキュメントを見てみる。
ドキュメントに書かれているコードにちょっとコメントを追記したのが下記。
$collection = collect([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
$chunks = $collection->chunk(2);
// 中身が想像できなかったので吐き出してみた
/**
* [
* [
* 0,
* 1,
* ],
* [
* 2 => 2,
* 3 => 3,
* ],
* [
* 4 => 4,
* 5 => 5,
* ],
* [
* 6 => 6,
* 7 => 7,
* ],
* [
* 8 => 8,
* 9 => 9,
* ],
* ]
*/
$sequence = $chunks->mapSpread(function (int $even, int $odd) {
return $even + $odd;
});
$sequence->all();
// [1, 5, 9, 13, 17]
chunkが連想配列と配列が混じった不思議な挙動するな...
まあ、単純にcollectionの中のcollectionに対してそれぞれ操作を行なって新しいcollectionを作る感じらしいです。
それのArrayヘルパーでの実装がこのPR。
ちなみにドキュメントに使い方も追加していて、chunk使ってない分こっちの方がわかりやすいかも。
[11.x] add list rule by @medilies in #50454
Validationのルールで、array
というルールが存在するが、array
だと下記の1と2のどちらもパスしていた。新たに作られたlist
というルールだと、2だけしかパスしなくなる。
1. ['foo' => [1 => 1, 2 => 2]]
2. ['foo' => [1, 2, 3]]
[11.x] Fixes installation of passport by @nunomaduro in #50488
今までの書き方だと、sail artisan install:api --passport
実行時にpassportがまだロードされていない可能性があったため、落ちていたっぽい。
というのも、passportがパッケージとしてインストールされていない場合、このコマンド実行時に最初の方でインストールされる。ただ、そのまま$this->call('passport:install')
でpassportを呼び出そうとしても元のプロセスではパスポートがインストールされた後のautoloadを読み取れてないのでバグるっぽい?(autoloadの認識が雑なので間違っていたらすみません)
再現してみた
まずは適当にLaravelの環境を用意して、composer.json
に書かれているLaravelのバージョンをv11.0.2
に固定する。
--- a/composer.json
+++ b/composer.json
@@ -7,7 +7,7 @@
"require": {
"php": "^8.2",
"inertiajs/inertia-laravel": "^1.3",
- "laravel/framework": "^11.9",
+ "laravel/framework": "11.0.2",
"laravel/tinker": "^2.9"
},
そのままsail artisan install:api --passport
と入力する。
$ sail artisan install:api --passport
(省略)
Would you like to use UUIDs for all client IDs? (yes/no) [no]:
> yes
ERROR There are no commands defined in the "passport" namespace.
こんな感じで落ちる。
これがv11.0.3
だと修正されている。
修正されていることを確認してみる。
ただ、すでにpassportがインストールされているとそもそもバグが再現しないので、一旦vendorは吹き飛ばしてもう一度git reset --hard && git clean -fd && composer install
などをかけておく必要があります。
上記の諸々をやったあと、Laravelのバージョンをv11.0.3に固定して、
$ sail artisan install:api --passport
Would you like to use UUIDs for all client IDs? (yes/no) [no]:
> yes
INFO API scaffolding installed. Please add the [Laravel\Passport\HasApiTokens] trait to your User model.
バッチリ直ってますね。
Discussion