Laravel 8을 사용하고 있습니다. Laravel 8을 새로 설치하면 경로가로드되는 경로 그룹에 적용되는 네임 스페이스 접두사가 없습니다.
"이전 Laravel 릴리스에서는에 속성이 RouteServiceProvider
포함 $namespace
되었습니다.이 속성의 값은 컨트롤러 경로 정의 및 action
도우미 / URL::action
메서드 호출에 자동으로 접두사로 추가 됩니다. Laravel 8.x에서이 속성은 null
기본적으로 사용됩니다. 즉, 자동 네임 스페이스 접두사가 없습니다. 라 라벨이 할 것입니다. " Laravel 8.x 문서-릴리스 노트
네임 스페이스 접두사를 사용하지 않을 때 경로에서 컨트롤러를 참조 할 때 컨트롤러에 대해 정규화 된 클래스 이름을 사용해야합니다.
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
Route::get('/users', 'App\Http\Controllers\UserController@index');
이전 방식을 선호하는 경우 :
App\Providers\RouteServiceProvider
:
public function boot()
{
...
Route::prefix('api')
->middleware('api')
->namespace('App\Http\Controllers')
->group(base_path('routes/api.php'));
...
}
선언 된 네임 스페이스를 원하는 경로 그룹에 대해이 작업을 수행합니다.
$namespace
특성 :
릴리스 노트에 $namespace
설정해야 할 속성에 대한 언급이 RouteServiceProvider
있고 여기에 주석을 달아도 RouteServiceProvider
경로에 영향을 미치지 않습니다. 현재 작업에 URL을 생성하기위한 네임 스페이스 접두사를 추가하기위한 것입니다. 따라서이 변수를 설정할 수 있지만 그 자체로는 이러한 네임 스페이스 접두사를 추가하지 않습니다. 라우팅 그룹에 네임 스페이스를 추가 할 때이 변수를 사용하고 있는지 확인해야합니다.
이 정보는 현재 업그레이드 가이드에 있습니다.
Laravel 8.x 문서-업그레이드 가이드-라우팅
업그레이드 가이드가 보여주는 중요한 부분은 경로 그룹에 네임 스페이스를 정의한다는 것입니다. $namespace
변수 만 설정하면 작업에 대한 URL을 생성하는 데 도움이됩니다.
다시 한 번 강조 할 수는 없습니다. 중요한 부분은 경로 그룹에 대한 네임 스페이스를 설정하는 것입니다.이 작업 $namespace
은 예제에서 직접 멤버 변수를 참조하여 수행됩니다 .
최신 정보:
버전 8.0.2 이후 Laravel 8의 새 복사본을 설치 한 경우 laravel/laravel
에서 protected $namespace
멤버 변수의 주석 처리를 제거 RouteServiceProvider
하여 이전 방식으로 돌아갈 수 있습니다. 라우트 그룹이 그룹의 네임 스페이스에이 멤버 변수를 사용하도록 설정되어 있기 때문입니다.
유일한 경로 그룹이 설치 네임 스페이스로이 변수를 사용하기 때문에 경로에 할당 된 컨트롤러에 네임 스페이스 접두사를 추가 이유의 주석이다 :
...
->namespace($this->namespace)
...
Api
폴더 안에 컨트롤러가 있습니다 .?