How to get validation message in laravel 5.5

会有一股神秘感。 提交于 2019-12-10 15:41:18

问题


hi folks I'm working on Laravel 5.5 and here I need to display validation messages for my API upto now I have done like this

$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);
        }

Since Laravel 5.5 has some awesome validation features I am looking to validate my request like this

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

But I am facing issue here what should I do to check if the validation fails? Like I was doing by if($validator->fails)


回答1:


In Laravel 5.5, like the documentation mention, the validation process is very easy :

  • Displaying The Validation Errors :

So, what if the incoming request parameters do not pass the given validation rules? As mentioned previously, Laravel will automatically redirect the user back to their previous location. In addition, all of the validation errors will automatically be flashed to the session.

Again, notice that we did not have to explicitly bind the error messages to the view in our GET route. This is because Laravel will check for errors in the session data, and automatically bind them to the view if they are available.

  • AJAX Requests & Validation :

In this example, we used a traditional form to send data to the application. However, many applications use AJAX requests. When using the validate method during an AJAX request, Laravel will not generate a redirect response. Instead, Laravel generates a JSON response containing all of the validation errors. This JSON response will be sent with a 422 HTTP status code.

So as you said : that means you don't need to put your ifs to handle validation laravel will take care of them itself great :)




回答2:


here is some syntax that i use

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);
        }
 }

hope this will help you!




回答3:


Please add Accept: application/json in you header.

Laravel automatically send an error message with response code.




回答4:


As per 2019 Laravel 5.8 it is as easy as this:

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

You will get the array of arrays of the fields' names and error messages.



来源:https://stackoverflow.com/questions/46487040/how-to-get-validation-message-in-laravel-5-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!