우리 모두는 경로로 가득 찬 매우 큰 파일을 가지고 있는 상황에 처해 있었을 것입니다. 거짓말은 아니고, 이 문제로 인해 오랫동안 미칠 지경이 되었고 이를 고칠 방법을 찾아야 했습니다. 그래서 이것이 라우팅 파일을 구성한 방법입니다.
추천 튜토리얼: "laravel tutorial"
처음에는 라우팅 그룹 방식을 사용하여 파일을 수신할 생각이었습니다. 이것이 laravel이 RouteServiceProvider에서 경로를 분할하는 방법입니다.
<?php namespace App\Providers; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Route; class RouteServiceProvider extends ServiceProvider { /** * 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'; /** * Define your route model bindings, pattern filters, etc. * * @return void */ public function boot() { // parent::boot(); } /** * Define the routes for the application. * * @return void */ public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); // } /** * Define the "web" routes for the application. * * These routes all receive session state, CSRF protection, etc. * * @return void */ protected function mapWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); } /** * Define the "api" routes for the application. * * These routes are typically stateless. * * @return void */ protected function mapApiRoutes() { Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api.php')); } }
사용자 관련 경로를 users.php라는 파일로 추상화하고 mapApiRoutes를 mapUsersRoutes로 복사한 후 이를 내 users.php 파일에 지정했습니다.
/** * Define the routes for the application. * * @return void */ public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); $this->mapUsersRoutes(); // } /** * Define the "api" routes for the application. * * These routes are typically stateless. * * @return void */ protected function mapUsersRoutes() { Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/users.php')); }
나는 당신이 무슨 생각을 하는지 알아요. 분명히 이것이 최선의 해결책은 아닙니다. 왜냐하면 새 파일을 만들어야 할 때마다 이전처럼 등록해야 하기 때문입니다. 그래서 저는 이 초기 아이디어를 다듬어야 했습니다.
애플리케이션 전반에 걸쳐 공용 부분을 별도의 라우팅 파일로 분할하는 아이디어가 있었고, 우리 경로 중 어느 것도 인증된 경로, 게스트 경로, 공용 경로를 넘어설 수 없다는 생각이 있었습니다.
라우팅 폴더의 구조를 다음과 같이 최적화했습니다.
├── routes │ ├── api │ │ ├── public │ | │ ├── users.php │ │ ├── auth │ | │ ├── users.php │ │ ├── guest │ | │ ├── users.php
얼핏 보면 "글쎄, 별로 바뀌지 않았으니 아직 이 파일들을 매핑해야 해"라고 생각할 수도 있습니다. 그러나 우리는 실제로 PHP에서 기본적으로 제공하는 glob이라는 함수를 활용할 수 있습니다. 이는 laravel의 솔루션에 연결되지 않기 때문에 즉시 사용 가능한 솔루션입니다.
glob은 정규식을 허용하고 정규식과 일치하는 경로에서 파일 이름을 찾을 수 있습니다. 따라서 우리의 경로는 특정 폴더 아래에 구성되어 있으며 이제 이 폴더 아래의 모든 파일을 찾아 미들웨어에 등록할 수 있습니다.
<?php namespace App\Providers; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Route; class RouteServiceProvider extends ServiceProvider { /** * 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'; /** * Define the routes for the application. * * @return void */ public function map() { $this->mapAuthRoutes(); $this->mapGuestRoutes(); $this->mapPublicRoutes(); // $this->mapWebRoutes(); // } /** * Define the "web" routes for the application. * * These routes all receive session state, CSRF protection, etc. * * @return void */ protected function mapWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); } /** * Define the "api" routes for the application. * * These routes are typically stateless. * * @return void */ protected function mapAuthRoutes() { foreach (glob(base_path('routes/api/auth/*.php')) as $file) { Route::prefix('api') ->middleware(['api', 'auth:api']) ->group($file); } } protected function mapGuestRoutes() { foreach (glob(base_path('routes/api/guest/*.php')) as $file) { Route::prefix('api') ->middleware(['api', 'guest:api']) ->group($file); } } protected function mapPublicRoutes() { foreach (glob(base_path('routes/api/public/*.php')) as $file) { Route::prefix('api') ->middleware('api') ->group($file); } } }
이제 새 파일을 만들 때마다 foreach는 정규식 일치를 사용하므로 파일을 찾습니다(파일은 해당 경로에 있고 PHP 확장자가 있으므로 정규식과 일치합니다). 너무 섹시해요! 하지만 잠시만 기다려주세요.
이 문서는 어떻게 등록되나요?
laravel의 수명주기를 연구했다면 서비스 제공자가 laravel 요청의 수명주기의 일부이며 우리는 이 기능을 활용하여 경로를 동적으로 등록할 수 있다는 것을 알고 있습니다.
그렇습니다! 나는 당신이 그것을 좋아하길 바랍니다.
원본 주소 : https://dev.to/secmohammed/how-to-separa...
번역 주소 : https://learnku.com/laravel/t/42989
위 내용은 Laravel 라우팅 파일을 분할하는 매우 세분화된 방법(번역)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!