Laravel 8: 라우팅 변경

6067 단어 laravelupdate
Laravel 8의 출시와 함께 라우팅 구문에 대한 변경 사항이 있어 적어도 저에게는 그랬습니다. 영향이 높거나 낮은 변경 사항이 아니었기 때문에 끝까지 읽는 것을 건너 뛰고 다시 나를 괴롭 혔습니다.

새로운 laravel 8 설치에서 내 web.php 파일에 다음이 있습니다.

Route::get('/', 'HomeController@index');


그리고 이것은 HomeController.php의 인덱스 방법에서

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('welcome');
    }


이것은 매우 친숙해야 하며 / 경로를 방문할 때 보기를 기대합니다. 오히려 우리가 보는 것은 오류 페이지입니다.



일을 망쳤다고 생각하기 시작할 수도 있지만 그렇지 않았습니다. 오히려 laravel 8에서는 이 구문이 기본적으로 작동하지 않습니다. upgrade guide에서 언급되었지만 영향의 가능성은 선택 사항 🤨이었습니다. 이것이 언급되었지만 :

In most cases, this won't impact applications that are being upgraded because your RouteServiceProvider will still contain the $namespace property with its previous value. However, if you upgrade your application by creating a brand new Laravel project, you may encounter this as a breaking change.



laravel 8에서 경로를 정의하는 방법은 다음 중 하나입니다.

use App\Http\Controllers\HomeController;

// Using PHP callable syntax...
Route::get('/', [HomeController::class, 'index']);


또는

// Using string syntax...
Route::get('/', 'App\Http\Controllers\HomeController@index');


리소스 경로는

Route::resource('/', HomeController::class);


이것은 laravel 8에서 기본적으로 자동 컨트롤러 선언 접두사가 없다는 것을 의미합니다.

이전 방식을 고수하려면 RouteServiceProvider.php에 네임스페이스 속성을 추가하고(이 속성은 이전 버전에 있음) route 메서드에서 활성화해야 합니다.

    /**
     * This namespace is applied to your controller routes.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    // Edit boot method  
    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));

            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));
    });


요약하자면 laravel 8에서는 새 구문을 사용하여 경로를 정의하거나 이전 방식을 고수할 수 있습니다.

좋은 웹페이지 즐겨찾기