web-dev-qa-db-ja.com

Laravel検証からエラーメッセージを取得する

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文字でなければなりません」を取得したいです。どうやってやるの?

11
ZZZ

これを試して:

if ($validator->fails()) {
   $error = $validator->errors()->first();
}
17
rome 웃

Ajaxリクエストでdataを取得したら、data.name

これにより、nameフィールドのエラーメッセージが表示されます。

$.ajax({
        url: "/your-save-url",
        type: "post",
        data: serializedData,
        success: function(data) { alert(data.name)}
    });
1
Jilson Thomas

検証に失敗した場合、withErrorsメソッドを使用して、エラーメッセージをセッションにフラッシュできます。これは配列であり、このメソッドはリダイレクト後にすべてのビューで$errorsを自動的に共有します。

return redirect('register')->withErrors($validator, 'login');

MessageBagは、$errors変数のインスタンスを使用してアクセスできます。

{{ $errors->login->first('email') }}

Form API ドキュメント

これがお役に立てば幸いです。

1
ArtisanBay

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_に移動し、keyshashasAnyfirstallisEmptyなどの特定の検証エラーを確認し、HTTP応答メッセージをカスタマイズするときに必要な便利なメソッドを見つけます。

ソースコードを見ると、彼らが何をしているのか簡単に理解できます。以下は Laravel 5.8 APIリファレンス ですが、おそらくソースコードほど有用ではありません。

1
bob-12345