Laravel validate Content-Type: application / json request

in laravel 5 I made a new request called ApiRequest .

 class ApiRequest extends Request { public function authorize() { return $this->isJson(); } public function rules() { return [ // ]; } } 

As you can see, I only accept json data. And I get json in the controller like this

 public function postDoitApi(ApiRequest $payload) { $inputJson = json_decode($payload->getContent()); $name = $inputJson->name; } 

Which is working fine. I get data in $name . But now I need to check json input. I need to set a validation rule in ApiRequest for a key name like this

 public function rules() { return [ 'name' => 'required|min:6' ]; } 

Help me do this. Thanks.

+7
json web-services laravel laravel-5
source share
4 answers

Instead of the rules method, you can use the validator method:

 class ApiRequest extends Request { public function authorize() { return $this->isJson(); } public function validator(){ //$data = \Request::instance()->getContent(); $data = json_decode($this->instance()->getContent()); return \Validator::make($data, [ 'name' => 'required|min:6' ], $this->messages(), $this->attributes()); } //what happens if validation fails public function validate(){ $instance = $this->getValidatorInstance(); if($this->passesAuthorization()){ $this->failedAuthorization(); }elseif(!$instance->passes()){ $this->failedValidation($instance); }elseif( $instance->passes()){ if($this->ajax()) throw new HttpResponseException(response()->json(['success' => true])); } } } 
+1
source share
  return $inputJson->toArray(); 

and then go to the validator

  $name = ['name'=>'er']; $rules = array('name' => 'required|min:4'); $validation = Validator::make($name,$rules); 
0
source share

you can put the following function in an ApiRequest form ApiRequest .

 public function validator(){ return \Validator::make(json_decode($this->getContent(),true), $this->rules(), $this->messages(), $this->attributes()); } 
0
source share

Laravel checks for similar AJAX requests. Just make sure you specify one of these request headers for your request:

'Accept': 'application/json'

'X-Requested-With': 'XMLHttpRequest'

0
source share

All Articles