【環境】
windows10 64bit
php 7.4.27
laravel 8
こんにちは、今回はこんなケースです。
こんな感じで設定を行って、
➀ プレーヤまたはコンピュータのどちらにもチェックが入ってない場合にエラー
➁ 名前の欄が未記入ならエラー
という内容を、laravelのvalidationを使って表示させようとするという内容です。
最初はこんなもん簡単にできるやろうと思ったが意外な落とし穴にはまってしまって苦戦しました。
まずこれの設定ですが、こんな感じ
{{-- エラーメッセージ --}}
@if ($errors->any())
@foreach ($errors->all() as $error)
<p> <strong style="color:red;">{{ $error }}</strong></p>
@endforeach
@endif
{{-- ここまで --}}
/** ラジオボタンの設定 **//
//プレーヤにチェック = "1”を返す
//コンピュータにチェック = "0"を返す
//どちらにもチェックがない = nullを返す
/** 名前入力の設定 **//
//入力したものを返す。ただし、未記入の場合nullを返す
<p><input type="radio" name="chara" id="chara" value="1">プレーヤ</p>
<p>デーモン様のお名前を入力してください</p>
<input type="text" id="player_name" name="player">
<p><input type="radio" name="chara" value="0">コンピューター</p>
共通しているのは、nullが返ってきたらバリデーションでエラーを返すと考えて、
"required"で設定すればいいかなと思ったが、
// バリデーション
$validatedData = $request->validate([
'chara' => 'required',
'player' => 'required'
]);
requiredの場合、このように設定されています。
'required' => ':attributeは、必ず指定してください。
:attributeはここでは、それぞれのname属性の名前が返ってきてます
(● ラジオボタン => name = "chara" , ● テキストボックス => name = "player")
これでは見ている人から見れば、何のエラーかわかりにくいですよね?
ましてや、名前を入れてないことのエラーが 「必ず指定してください」っていうのもなんか変((+_+))
というわけで、各々のrequiredにメッセージを入れるという設定をしないといけません。((+_+))
けど、私の知っているの方法としては、
● ruleのディレクトリを設定する
● middlewareのディレクトリを設定する
この2つの方法です。ちょっと面倒くさいと思いました、、、、が
###「いやいや第2引数にメッセージを作ったらそれで完結するよ」
と教えてもらい、すんごく楽チンでした。
こんな感じです。
// バリデーション
$validatedData = $request->validate([
'chara' => 'required',
'player' => 'required'
], [ //ここから第2引数
'chara.required' => '【エラー】:チェックしてください',
'player.required' => '【エラー】:枠内を入力してください', ここまで//
]);
これでちゃんと設計通りにできました(^^)/
↓ ↓ ↓ ↓
なお、今回の内容は、laravelの青本に書いてるとのことです。基本さえわかっていたら、そこまでググらなくても出てくるよ、、と
まとめると・・・やっぱり基礎にもどる習慣をつけておこうと思ったのでした。
基礎を見なおす → なかったらググる
以上です。