
위와 같이 계층별로 역할이 나뉨
이제 validation으로
$validator = Validator::make($request->all(), [
"name" => "required",
"age" => "required"
]);
if ($validator->fails()) {
return $this->fails_msg($validator->errors()->first());
}
위의 코드는 validation을 수행하는 코드
$validator = Validator::make($request->all(), [
"name" => "required",
"age" => "required"
]);
/*
"name" => "required",
request시 전달되는 name값이 required이어야한다.
*/
validation의 조건에는 required말고도 엄청나게 많은 조건들을 제공
라라벨 공식 홈페이지를 참고해보면
굉장히 많은 옵션
(https://laravel.com/docs/11.x/validation#rule-prohibited-unless)
// 유효성검사에 걸린 경우
if ($validator->fails()) {
return $this->fails_msg($validator->errors()->first());
}
이때 laravel은 422status와 함께 msg를 리턴
msg는 영문으로 되어있으며, 위배된 항목에 대한 설명
$validatedData = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
]);
validator이 아닌 validate를 사용해서도 validation을 구현할 수 있음
만약, msg가 기본으로 제공되는 영문이 아니라 한글로 전달하고 싶은 경우 커스텀이 가능
$validator = Validator::make($request->all(), [
'file' => 'required|image|mimes:jpeg,png,jpg|max:2048',
], [
'file.required' => '파일이 필요합니다.',
'file.image' => '파일은 이미지여야 합니다.',
'file.mimes' => '이미지 확장자(jpeg, png, jpg)만 허용됩니다.',
'file.max' => '이미지 파일 크기는 최대 2MB이어야 합니다.',
]);
if ($validator->fails()) {
return [
'status' => 400,
'data' => [],
'msg' => $validator->errors()->first()
];
}
각 validation 조건 별로 메세지를 다르게 설정할 수 있고, 리턴될때 status도 422가 아닌,
상태 값을 다르게 지정할 수 있다
여기서 422가 아닌 400을 쓴 이유는 아래에서...
http응답코드란? (https://developer.mozilla.org/ko/docs/Web/HTTP/Status)
자 여기서 400과 422에 대해
laravel의 공홈, http응답코드 문서에서도 나와 있듯
유효성 검사에 실패한 경우 422를 제공하지만,
오류코드에 대한 컨벤션이 정해져있지 않아
두가지 선택지중 일단은 후자를 선택
프로젝트 오픈이 되고 나중에 여유가 된다면 꼭 짚고 넘어갈 생각이다.