다음 위치에 사용자 지정 유효성 검사 클래스를 만들었습니다 app\Http\Requests
.
<?php
namespace App\Http\Requests;
use App\Http\Requests\BaseFormRequest;
class RegisterUserRequest extends BaseFormRequest
{
protected static $NEEDS_AUTHORIZATION = false;
protected static $FORM_RULES = [
'first_name' => 'required|string|max:80',
'last_name' => 'required|string|max:80',
'email' => 'required|unique:users|email',
'password' => 'required|string|min:6|confirmed',
'terms_conditions' => 'accepted'
];
}
BaseFormRequest
동일한 디렉토리에서 확장 됩니다.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Validator;
use Illuminate\Validation\ValidationException;
use Illuminate\Http\Exceptions\HttpResponseException;
//use Illuminate\Http\Request;
abstract class BaseFormRequest extends FormRequest
{
protected static $NEEDS_AUTHORIZATION = true;
protected static $FORM_RULES = [];
protected static $ERROR_MESSAGES = [];
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize() : bool
{
return !static::$NEEDS_AUTHORIZATION;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules() : array
{
return static::$FORM_RULES;
}
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return static::$ERROR_MESSAGES;
}
/**
* @overrride
* Handle a failed validation attempt.
*
* @param \Illuminate\Contracts\Validation\Validator $validator
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/
protected function failedValidation(Validator $validator) : void
{
//throw (new ValidationException(response()->json($validator->errors(), 422)));
throw new HttpResponseException(response()->json($validator->errors(), 422));
}
}
이제 내 컨트롤러에서 사용하려고 할 때 :
<?php
namespace App\Http\Controllers\API;
use App\Services\UserService;
use Illuminate\Http\JsonResponse as JsonResponse;
//use Iluminate\Http\Request;
use App\Http\Requests\RegisterUserRequest;
class UserController extends Controller
{
private $user;
public function __construct(UserService $user)
{
$this->user = $user;
}
public function store(RegisterUserRequest $request) : JsonResponse
{
$registered_user = $this->user->register($request->validated());
return response()->json(['status' => 201, 'user_id' => $registered_user->id]);
}
}
다음과 같은 오류가 발생합니다.
ReflectionException 클래스 App \ Http \ Requests \ RegisterUserRequest가 없습니다.
재미있는 점은 내가 덮어 쓰는 방법을 제거하면 failedValidation
오류가 사라졌지 만 내가 피하려는 홈 페이지로 리디렉션된다는 것입니다. 항상 json 응답을 반환하고 싶습니다.
어떤 제안? 감사
참고 것으로 failedValidation()
기능의 인스턴스 매개 변수로 기대 \Illuminate\Contracts\Validation\Validator
:
/**
* ...
* @param \Illuminate\Contracts\Validation\Validator $validator
* ...
*/
하지만 Illuminate\Validation\Validator
인스턴스를 전달하고 있습니다 .
use Illuminate\Validation\Validator;
protected function failedValidation(Validator $validator) : void
{
throw new HttpResponseException(response()->json($validator->errors(), 422));
}
따라서 변경할 수 있습니다.
use Illuminate\Validation\Validator;
...에
use Illuminate\Contracts\Validation\Validator;
또는 매개 변수의 네임 스페이스와 함께 전달합니다.
protected function failedValidation(\Illuminate\Contracts\Validation\Validator $validator) : void
{
throw new HttpResponseException(response()->json($validator->errors(), 422));
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다