📘

Laravel v11.0.5 まとめ

2024/10/03に公開

30minで読めるだけ読んだので、全部のリリースはまとめきれてないこともあります。
リリースノートはこちら

[11.x] Improves broadcasting install by @nunomaduro

本来、uncommentChannelsRoutesFileroutes/channels.phpが存在しない時にのみ行われていたようだが、ファイルが存在していても実行できるようにしたっぽい。

uncommentChannelsRoutesFileメソッドは、channels:のコメントアウトをしているようです。

# bootstrap/app.php
return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        channels: __DIR__.'/../routes/channels.php',  // ここがコメントアウトされていなかった場合、コメントアウトをしてくれるらしいです。
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

ただ、内部のロジックを見てみると、そもそもchannles: が存在しなかった場合は新しく行を追加して付け加えているので実はuncommentというよりもsetの方がニュアンスとしては近いかもです。

[11.x] Improved exception message on 'ensure' method by @fgaroby

Collectionのensureメソッドで例外が発生する時のメッセージを改善したようです。

- Collection should only include [stdClass] items, but 'string' found.
+ Collection should only include [stdClass] items, but 'string' found at position 3.

ちなみにensureの役割はこちら

The ensure method may be used to verify that all elements of a collection are of a given type or list of types. Otherwise, an UnexpectedValueException will be thrown:

コレクションの各要素が引数に渡した型になっているか検証する。もし引数に渡した型以外が要素に存在した場合は、UnexpectedValueExceptionを投げる。

試しに使ってみましょう。

# 11.0.4(修正前)の場合
collect([1,2,'hoge'])->ensure('int');

   UnexpectedValueException  Collection should only include [int] items, but 'string' found.
# 11.0.5(修正後)の場合
collect([1,2,'hoge'])->ensure('int');

   UnexpectedValueException  Collection should only include [int] items, but 'string' found at position 2.

こんな感じでどこの要素の型で検証が失敗したか教えてくれます。

Add hasValidRelativeSignatureWhileIgnoring macro by @br13an

Requestクラスのmacroとして、hasValidRelativeSignatureWhileIgnoringを追加しているようです。

Request::macro('hasValidRelativeSignatureWhileIgnoring', function ($ignoreQuery = []) {
    return URL::hasValidSignature($this, $absolute = false, $ignoreQuery);
});

URL::hasValidSignatureはこんな感じです。

/**
 * Determine if the given request has a valid signature.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  bool  $absolute
  * @param  array  $ignoreQuery
  * @return bool
  */
public function hasValidSignature(Request $request, $absolute = true, array $ignoreQuery = [])
{
    return $this->hasCorrectSignature($request, $absolute, $ignoreQuery)
        && $this->signatureHasNotExpired($request);
}

[11.x] Prevents database redis options of being merged by @nunomaduro

Redisのクラスターを設定しようとした時にある条件を満たすと設定がマージされるようです(クラスタやったことないのでわからなかった..)。

GitHubで編集を提案

Discussion