(Laravel)bladeファイル内での $errors に、任意項目のエラーメッセージを追加するマクロ
app/Provider/BladeCustomizeProvider.php
\Blade::directive('register_message_to_errors_variable', function ($expression) {
[$key, $message] = explode(',',$expression);
return "<?php if(!".'$errors->hasBag()){'.'$errors->put("default", (new \Illuminate\Support\MessageBag));}'.'$errors->add('."{$key}".",{$message}"."); ?>";
});
使い方
form.blade.php
@register_message_to_errors_variable($key, '$errorsに登録したメッセージ')
{{ $errors->first($key) }}
{{-- 登録したメッセージが描画される --}}
bladeフォーム内にValidationのエラーメッセージを出す処理にて$errors->first()を使用していて、この変数に任意のエラーを追加できるディレクティブを作成しました。
中の処理は上の記事に載せていただいていたクラスを辿り、$errors->add($key, $message);
をすると、Illuminate\Support\ViewErrorMessageBag
の__callメソッドにより、デフォルトのIlluminate\Support\MessageBag
のインスタンスのaddメソッドが呼ばれ、メッセージの登録が行われて、$errors->first($key)
でメッセージが取得できる、ということがわかりました。
この処理をまとめてディレクティブにして再利用することを目的として作りました。
以上です。