[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_if
とexclude_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でvirtual
とstored
カラムがサポートされるようになりました (#30971)
Eloquent Builderにmixin()
メソッドが追加されました (#30978, @28fa74e)
macro()
メソッドでの追加はすでにサポート済みでしたが、mixin()
メソッドで一度に複数のマクロを追加できるようになりました。
Redis ConnectionにMacroable
トレイトが追加されました (#31020)
PackageManifest::config()
メソッドが追加されました (#31039, @9b73540)
パッケージ内のcomposer.jsonファイルのproviders
とaliases
にオリジナルのクラスを指定可能でしたが、任意の設定を参照できる様になりました。
サービスコンテナにredis.connection
のエイリアスが追加されました (#31034)
Illuminate\Console\Command
クラスからLaravelに依存していた部分が別のクラスに抽出されました (#31026, @ef72716 )
Storage::putFile()
メソッドのファイルパスに絶対パスが指定可能になりました (#31040)
詳しい変更については以下を確認してください。