Laravel組み込みバリデーターを使用し、最初のエラーメッセージを取得したい
if ($validator->fails()) {
$error = $validator->messages()->toJson();
.....
}
これはエラーを印刷したときの結果です
{"name":["The name must be at least 5 characters."],"alamat":["The address must be at least 5 characters."]}
上記の例では、最初のエラー、「名前は少なくとも5文字でなければなりません」を取得したいです。どうやってやるの?
これを試して:
if ($validator->fails()) {
$error = $validator->errors()->first();
}
Ajaxリクエストでdata
を取得したら、data.name
。
これにより、name
フィールドのエラーメッセージが表示されます。
$.ajax({
url: "/your-save-url",
type: "post",
data: serializedData,
success: function(data) { alert(data.name)}
});
検証に失敗した場合、withErrors
メソッドを使用して、エラーメッセージをセッションにフラッシュできます。これは配列であり、このメソッドはリダイレクト後にすべてのビューで$errors
を自動的に共有します。
return redirect('register')->withErrors($validator, 'login');
MessageBag
は、$errors
変数のインスタンスを使用してアクセスできます。
{{ $errors->login->first('email') }}
Form API ドキュメント
これがお役に立てば幸いです。
2019 Laravel 5.8のように、これは簡単です:
_// create the validator and make a validation here...
if ($validator->fails()) {
$fieldsWithErrorMessagesArray = $validator->messages()->get('*');
}
_
フィールド名とエラーメッセージの配列の配列を取得します。このようなもの:
_[
'price'=>
[
0 => 'Price must be integer',
1 => 'Price must be greater than 0'
]
'password' => [
[
0 => 'Password is required'
]
]
]
_
_Illuminate\Support\MessageBag
_クラスが提供する他の検証メッセージゲッターを使用できます(実際には、上記の$validator->messages()
が返すオブジェクトタイプです)。
_your_laravel_project_dir/vendor/illuminate/support/MessageBag.php
_に移動し、keys
、has
、hasAny
、first
、all
、isEmpty
などの特定の検証エラーを確認し、HTTP応答メッセージをカスタマイズするときに必要な便利なメソッドを見つけます。
ソースコードを見ると、彼らが何をしているのか簡単に理解できます。以下は Laravel 5.8 APIリファレンス ですが、おそらくソースコードほど有用ではありません。