laravel验证Content-Type:application/json请求

Sud*_*ara 8 json web-services laravel laravel-5

在laravel 5我提出了一个新的请求ApiRequest.

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

如你所见,我只接受json数据.我正在这样接收控制器中的json

public function postDoitApi(ApiRequest $payload) {
        $inputJson = json_decode($payload->getContent()); 
        $name = $inputJson->name;
}
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.我正在获取数据$name.但现在我需要验证输入json.我需要ApiRequest为这个name键设置验证规则

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

帮我这样做 谢谢.

Eme*_*bah 1

您可以使用验证器方法而不是规则方法:

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

        }

   }
}
Run Code Online (Sandbox Code Playgroud)