77 lines
1.8 KiB
PHP
77 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace Proengsoft\JsValidation\Remote;
|
|
|
|
use Illuminate\Contracts\Validation\Validator;
|
|
use Illuminate\Foundation\Http\FormRequest as Request;
|
|
use Illuminate\Http\Exceptions\HttpResponseException;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Validation\ValidationException;
|
|
|
|
class FormRequest extends Request
|
|
{
|
|
/**
|
|
* Field to identify requests originating from this library.
|
|
*/
|
|
const JS_VALIDATION_FIELD = '__proengsoft_form_request';
|
|
|
|
/**
|
|
* Validate the class instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function validateResolved()
|
|
{
|
|
parent::validateResolved();
|
|
|
|
// BC for Laravel versions prior to 6.x.
|
|
$this->passedValidation();
|
|
}
|
|
|
|
/**
|
|
* Handle a passed validation attempt.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function passedValidation()
|
|
{
|
|
if ($this->isJsValidation()) {
|
|
throw new HttpResponseException(
|
|
new JsonResponse(true, 200)
|
|
);
|
|
}
|
|
|
|
parent::passedValidation();
|
|
}
|
|
|
|
/**
|
|
* Handle a failed validation attempt.
|
|
*
|
|
* @param \Illuminate\Contracts\Validation\Validator $validator
|
|
* @return void
|
|
*
|
|
* @throws \Illuminate\Validation\ValidationException
|
|
*/
|
|
protected function failedValidation(Validator $validator)
|
|
{
|
|
if ($this->isJsValidation()) {
|
|
throw new ValidationException(
|
|
$validator,
|
|
new JsonResponse($validator->errors()->messages(), 200)
|
|
);
|
|
}
|
|
|
|
parent::failedValidation($validator);
|
|
}
|
|
|
|
/**
|
|
* Whether the request originated from laravel-jsvalidation.
|
|
*
|
|
* @return bool
|
|
*/
|
|
private function isJsValidation()
|
|
{
|
|
return $this->has(static::JS_VALIDATION_FIELD);
|
|
}
|
|
}
|