Как получить сообщение проверки в laravel 5.5

привет, ребята, я работаю над Laravel 5.5, и здесь мне нужно отображать сообщения проверки для моего API, до сих пор я делал так

$validator = Validator::make($request->all(),[
            'first_name' => 'email|required',
            'last_name' => 'nullable',
            'email' => 'email|required',
            'mobile_no' => 'nullable|regex:/^[0-9]+$/',
            'password' => 'required',
        ]);
        if($validator->fails)
        {
            $this->setMeta('status', AppConstant::STATUS_FAIL);
            $this->setMeta('message', $validator->messages()->first());
            return response()->json($this->setResponse(), AppConstant::UNPROCESSABLE_REQUEST);
        }

Поскольку в Laravel 5.5 есть несколько замечательных функций проверки, я хочу проверить свой запрос следующим образом.

request()->validate([
            'first_name' => 'email|required',
            'last_name' => 'nullable',
            'email' => 'email|required',
            'mobile_no' => 'nullable|regex:/^[0-9]+$/',
            'password' => 'required',
        ]);

Но я столкнулся с проблемой, что мне делать, чтобы проверить, не прошла ли проверка? Как я делал if($validator->fails)


person Mr. Pyramid    schedule 29.09.2017    source источник
comment
Ознакомьтесь с документацией, как это объясняется в разделах: Отображение проверки Ошибки и запросы и проверка AJAX !!   -  person Maraboc    schedule 29.09.2017
comment
Я не хочу отображать их в поле зрения, мне нужно отправить их обратно на мобильный, преобразовав в json()   -  person Mr. Pyramid    schedule 29.09.2017
comment
В разделе AJAX Requests & Validation сказано: Laravel generates a JSON response containing all of the validation errors. This JSON response will be sent with a 422 HTTP status code   -  person Maraboc    schedule 29.09.2017
comment
если вы хотите получить сообщение проверки, вы можете использовать этот return Response::json(array('success' => 0, 'msg' => $validation->getMessageBag()->first()), 200);   -  person Gaurav Gupta    schedule 29.09.2017
comment
@Maraboc будет ли это работать с запросом почтальона? или по запросу API я работаю над API, а не над AJAX bro   -  person Mr. Pyramid    schedule 29.09.2017
comment
@GauravGupta Мм .. Я не использую $validator здесь, я просто передаю запрос напрямую.   -  person Mr. Pyramid    schedule 29.09.2017
comment
Да, он проверит laravel, если это веб-запрос или json-запрос, а затем сделает удобный ответ :)   -  person Maraboc    schedule 29.09.2017
comment
это означает, что вам нужно поставить свои ifs для обработки проверки, laravel позаботится о них сам!   -  person Mr. Pyramid    schedule 29.09.2017
comment
@Maraboc, пожалуйста, опубликуйте ответ, чтобы я мог закрыть свой вопрос, вы можете использовать мой код для фрагмента :)   -  person Mr. Pyramid    schedule 29.09.2017
comment
@Mr.Pyramid я отправил ответ, который вы можете принять;)   -  person Maraboc    schedule 12.10.2017
comment
@Maraboc, братан, этот ответ не сработал для меня, видимо, я обнаружил, что мне нужно использовать laravel FormRequest, а для json мне нужно выполнить настройку. :(   -  person Mr. Pyramid    schedule 12.10.2017


Ответы (4)


В Laravel 5.5, как упоминается в документации, процесс проверки очень прост:

  • Отображение ошибок проверки:

Итак, что делать, если параметры входящего запроса не проходят заданные правила проверки? Как упоминалось ранее, Laravel автоматически перенаправит пользователя обратно в его предыдущее местоположение. Кроме того, все ошибки проверки будут автоматически переданы в сеанс.

Опять же, обратите внимание, что нам не нужно явно привязывать сообщения об ошибках к представлению в нашем маршруте GET. Это связано с тем, что Laravel проверит наличие ошибок в данных сеанса и автоматически привяжет их к представлению, если они доступны.

  • Запросы и проверка AJAX:

В этом примере мы использовали традиционную форму для отправки данных в приложение. Однако многие приложения используют запросы AJAX. При использовании метода проверки во время запроса AJAX Laravel не будет генерировать ответ перенаправления. Вместо этого Laravel генерирует ответ JSON, содержащий все ошибки проверки. Этот ответ JSON будет отправлен с кодом состояния HTTP 422.

Итак, как вы сказали: это означает, что вам не нужно помещать свои ifs для обработки проверки, laravel сам о них позаботится :)

person Maraboc    schedule 29.09.2017

вот некоторый синтаксис, который я использую

public static $user_rule = array(
'user_id'     => 'required',
'token' => 'required',
    );



public static function user($data)  
 {  
    try{
          $rules = User::$user_rule;
          $validation = validator::make($data,$rules);
          if($validation->passes())
          {


          }
          else
          {
              return Response::json(array('success' => 0, 'msg'=> $validation->getMessageBag()->first()),200);
          }
          return 1;
        }
    catch(\Illuminate\Databas\QueryException $e) {
            return Response::json(array('success' => 0, 'msg' => $e->getMessage()),200);
        }
 }

Надеюсь, что это поможет вам!

person Gaurav Gupta    schedule 29.09.2017

Пожалуйста, добавьте Accept: application/json в свой заголовок.

Laravel автоматически отправляет сообщение об ошибке с кодом ответа.

person pinku kumar    schedule 28.09.2018

Согласно Laravel 5.8 2019 года, это так же просто:

// create the validator and make a validation here...
if ($validator->fails()) {
    $fieldsWithErrorMessagesArray = $validator->messages()->get('*');
}

Вы получите массив массивов имен полей и сообщений об ошибках.

person Valentine Shi    schedule 19.08.2019