authorize() === false) { throw new AccessDeniedHttpException(); } $validator = app('validator')->make($this->all(), $this->rules(), $this->messages()); if ($validator->fails()) { throw new ValidationHttpException($validator->errors()); } } /** * Get the validator instance for the request. * * @return \Illuminate\Contracts\Validation\Validator * * @SuppressWarnings(PHPMD.ElseExpression) */ protected function getValidatorInstance() { $factory = $this->container->make(ValidationFactory::class); if (method_exists($this, 'validator')) { $validator = $this->container->call([$this, 'validator'], compact('factory')); } else { $validator = $this->createDefaultValidator($factory); } if (method_exists($this, 'withValidator')) { $this->withValidator($validator); } return $validator; } /** * Create the default validator instance. * * @param \Illuminate\Contracts\Validation\Factory $factory * * @return \Illuminate\Contracts\Validation\Validator */ protected function createDefaultValidator(ValidationFactory $factory) { return $factory->make( $this->validationData(), $this->container->call([$this, 'rules']), $this->messages(), $this->attributes() ); } /** * Get data to be validated from the request. * * @return array */ protected function validationData() { return $this->all(); } /** * Handle a failed validation attempt. * * @param \Illuminate\Contracts\Validation\Validator $validator * * @return void */ protected function failedValidation(Validator $validator) { if ($this->container['request'] instanceof Request) { throw new ValidationHttpException($validator->errors()); } parent::failedValidation($validator); } /** * Get the proper failed validation response for the request. * * @param array $errors * * @return \Symfony\Component\HttpFoundation\Response */ public function response(array $errors) { if ($this->expectsJson()) { return new JsonResponse($errors, 422); } return $this->redirector->to($this->getRedirectUrl()) ->withInput($this->except($this->dontFlash)) ->withErrors($errors, $this->errorBag); } /** * Format the errors from the given Validator instance. * * @param \Illuminate\Contracts\Validation\Validator $validator * * @return array */ protected function formatErrors(Validator $validator) { return $validator->getMessageBag()->toArray(); } /** * Get the URL to redirect to on a validation error. * * @return string */ protected function getRedirectUrl() { $url = $this->redirector->getUrlGenerator(); if ($this->redirect) { return $url->to($this->redirect); } elseif ($this->redirectRoute) { return $url->route($this->redirectRoute); } elseif ($this->redirectAction) { return $url->action($this->redirectAction); } return $url->previous(); } /** * Determine if the request passes the authorization check. * * @return bool */ protected function passesAuthorization() { if (method_exists($this, 'authorize')) { return $this->container->call([$this, 'authorize']); } return false; } /** * Handle a failed authorization attempt. * * @return void */ protected function failedAuthorization() { if ($this->container['request'] instanceof Request) { throw new HttpException(403); } parent::failedAuthorization(); } /** * Get custom messages for validator errors. * * @return array */ public function messages() { return []; } /** * Get custom attributes for validator errors. * * @return array */ public function attributes() { return []; } /** * Set the Redirector instance. * * @param \Laravel\Lumen\Http\Redirector|\Illuminate\Routing\Redirector $redirector * * @return $this */ public function setRedirector($redirector) { $this->redirector = $redirector; return $this; } /** * Set the container implementation. * * @param \Illuminate\Contracts\Container\Container $container * * @return $this */ public function setContainer(Container $container) { $this->container = $container; return $this; } }