오랜만에 새로운 프로젝트를 Laravel 8로 개발 시작.
테스트 코드를 먼저 작성하는 개발을 한번 해보려 했으나...
시작부터 당황하게 만들어준다.
라우트에 다음과 같은 경로를 추가 해주고 테스트를 실행
Route::get('/', 'BaseController@index')->name('site-index');
그랬더니....
Expected response status code [200] but received 500.
The following exception occurred during the request:
ReflectionException: Class "BaseController" does not exist in ...
컨트롤러를 찾을 수 없다고?
Laravel 양반 이게 무슨 소리요...
이전에 Laravel 5.x 쓸때는 잘 되었단 말이오...
그래서 잠시 구글링을 해 보니, 외국 형님들이 서로 주거니 받거니 정리를 잘 해 두셨더라. (링크)
1. 컨트롤러 클래스 네임 앞에, 네임스페이스 전체 경로를 포함 한다.
Route::get('/', 'App\Http\Controllers\BaseController@index')->name('site-index');
2. 해당 클래스를 use 키워드를 사용한다.
use App\Http\Controllers\BaseController;
Route::get('/main', [BaseController::class, 'index'])->name('site-index');
3. (이게 가장 편리 한 방법) RouteServiceProvider에 controller들의 네임스페이스를 설정 해 준다.
(컨트롤러 네임스페이스가 기본적으로 설정은 되어 있었으나 주석처리 되어 있었다.)
// app\Providers\R
protected $namespace = 'App\\Http\\Controllers';
3번 방법의 경우 7.x 최신버전까지는 기본 적용 되어 있었고
v8.0.0에서는 $namespace 변수 제거.
v8.0.1에서 $namespace = null로 되돌아옴.
v8.0.2부터 지금과 같은, 기본값 셋팅+주석처리가 되어 있음.
IDE에서 코드 추적 등을 고려 해보면 2번 방법에 익숙해지는것이 좋을것 같다.
댓글