• このエントリーをはてなブックマークに追加

[Laravel] 6.10.0がリリースされました

laravel/frameworkのバージョン6.10.0がリリースされました。追加された機能について確認します。

テストヘルパーにwithoutMix()withMix()メソッドが追加されました (#30900)

テストを行う際にLaravel Mixの解除や再接続が可能になりました。

RequestクラスにvalidateWithBag()マクロが追加されました (#30835, @c0fdb56 )

バリデーション失敗時に作成されるMessageMagにオリジナルの名前を付けれるようになりました。

$request = Request::create('/', 'GET', ['name' => null]);
try {
    $request->validateWithBag('some_bag', ['name' => 'string']);
} catch (ValidationException $validationException) {
    $this->assertEquals('some_bag', $validationException->errorBag);
}

バリデーションルールにexclude_ifexclude_unless が追加されました (#30873)

例えばhas_doctor_appointmentチェックボックスがあるフォームで、チェックボックスを切り替えると日付と医師の名前を入力するフォームの表示と非表示が切り替わります。

チェックボックスをオフにした場合にはフォームは表示されませんが、値が入力済みの場合にはリクエスト時に送信されます。

このデータを検証する場合にはrequire_ifを使う場合にはデータのトリミングが必要です。

public function post(Request $request)
{
    $data = $request->validate([
        'has_doctor_appointment' => 'required|bool',
        'appointment_date' => 'required_if:has_doctor_appointment,true|date',
        'doctor_name' => 'required_if:has_doctor_appointment,true|string'
    ]);

    // $data === ['has_doctor_appointment' => false, 'appointment_date' => '2019-12-13']

    if (! $data['has_doctor_appointment') {
        $data['appointment_date'] = null;
        $data['doctor_name'] = null;
    }

    SomeModel::create($data);
}

exclude_ifを使用すると、このように検証できるようになります。

public function post(Request $request)
{
    $data = $request->validate([
        'has_doctor_appointment' => 'required|bool',
        'appointment_date' => 'exclude_if:has_appointment,false|required|date',
        'doctor_name' => 'exclude_if:has_appointment,false|required|string',
    ]);

    // $data === ['has_appointment' => false]

    SomeModel::create($data);
}

PostgreSQLでvirtualstoredカラムがサポートされるようになりました (#30971)

Eloquent Builderにmixin()メソッドが追加されました (#30978, @28fa74e)

macro()メソッドでの追加はすでにサポート済みでしたが、mixin()メソッドで一度に複数のマクロを追加できるようになりました。

Redis ConnectionにMacroableトレイトが追加されました (#31020)

PackageManifest::config()メソッドが追加されました (#31039, @9b73540)

パッケージ内のcomposer.jsonファイルのprovidersaliasesにオリジナルのクラスを指定可能でしたが、任意の設定を参照できる様になりました。

サービスコンテナにredis.connectionのエイリアスが追加されました (#31034)

Illuminate\Console\CommandクラスからLaravelに依存していた部分が別のクラスに抽出されました (#31026, @ef72716 )

Storage::putFile()メソッドのファイルパスに絶対パスが指定可能になりました (#31040)


詳しい変更については以下を確認してください。

Release v6.10.0 · laravel/framework · GitHub