미래기록
[Laravel6.x] Class 'App\Http\Controllers\Input' not found 유효성검사 에러 본문
라라벨을 혼자서 공부하는 중이라 최근 영상이 별로 없어서 예전 구현영상들을 따라하고 있는데
버전에 따라서 없어진 것들도 있어 에러가 났을 때 코드만 주구장창 들여다보고서는 답이 안나와서 답답했다.
알고보니 라라벨이 버전업되면서 사라진 것...역시 검색을 생활화하자!
정보를 DB에 등록하거나 업데이트할 때 유효성검사를 하는데 똑같이 적용해도
Class 'App\Http\Controllers\Input' not found 라는 에러가 나온다.
낮은 버전에서 구현시 Input Facade를 사용하여 유효성검사했던 것이 Laravel6.x에서는 없어졌다.
Request파사드와 겹치는 것이 많았던 Input파사드가 없어져 Input메소드를 더이상 사용할 수 없고
Laravel6.x에서는 Input::get메소드를 사용하려면 Request::input 메소드를 사용해야한다.
요약
Input Facade
대신1. Request Facade의 request메소드
를 사용하거나 2.Vaildator Facade
를 쓰면 된다.
1.Request Facade의 request메소드 사용하기
use Illuminate\\Support\\Facades\\Validator;
$validatedData = $request->validate([
'title' => ['bail','required','unique:posts','max:255'],
'body' => ['required'],
]);
$request
객체에validate()
메소드를 사용하면 유효성 검사가 통과된 경우 결과가 유효성 검사된 데이터를 포함하는 배열이 되거나 오류를 처리하고 오류 세부 정보를 응답에 추가해 view에 표시한다.
쉽게 말해서 유효성 검사가 실패하면 적절한 응답이 자동으로 생성되고, 통과되면 컨트롤러가 계속 정상적으로 실행된다.
그러므로 2번과 같이 따로 결과를 리턴하는 코드를 작성하지 않아도 된다.
(에러를 확인하려면 리다이렉트되는 view에는 error표시할 코드를 작성해야함.)
2.Validator facade로 수동 생성하기
validate요청에 메서드를 사용하지 않으려면 validator
파사드를 이용해 유효성 검사 인스턴스를 만들 수 있다.make
메소드는 새로운 인스턴스를 생성한다.
use App\\Http\\Controllers\\Controller;
use Illuminate\\Support\\Facades\\Validator;
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect()
->back()
->withErrors($validator)
->withInput();
}
// Store the blog post...
}
make
메소드의 첫번째 인자는 유효성 검사를 받을 데이터이고 두 번째 인자는 유효성 검사 규칙이다.fails()
의 응답으로 오류 응답을 수동으로 처리 할 수 있다.
아래 if문은 유효성검사의 실패유무를 따져서 withErrors
메소드로 결과를 세션에 저장한다.withErrors
메소드는 리다이렉트된 후에 $error
변수가 자동으로 뷰로 전달되어 유저에게 error메세지를 보여 줄 수 있게 한다.
blade view파일에서 error 표시하기
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
$errors
변수는 뷰안에서 언제든 사용가능하다.
참고
https://laravel.kr/docs/6.x/validation
https://laravel.com/docs/6.x/upgrade#the-input-facade