روتها/Routes در پروژه های بزرگ لاراولی ممکن هست زیاد و شلوغ بشن، خوانایی پایین بیاد و هنگام ویرایش دچار سردرگمی بشین. در این مطلب سه روش برای حل این مشکل رو توضیح میدم و شما میتونید با توجه به پروژه و ارزیابی خودتون یکی رو انتخاب کنید.
استفاده از RouteServiceProvider
این Provider مسیر های تعریف شده رو در routes/web.php و routes/api.php لود میکنه. میتونید روتها رو به فایلهای کوچکتر تبدیل و در RouteServiceProvider تعریفشون کنید. دقیقا مثل کاری که به طور پیشفرض با web.php و api.php انجام داده. در مثال زیر متد بوت RouteServiceProvider رو ویرایش و posts رو اضافه کردم. در routes/posts.php مسیر های مربوط به ماژول post من قرار داره.
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
// new routes.
Route::middleware('api')
->group(base_path('routes/posts.php'));
});
}
به نظرم این روش پیچیدگی روتهای زیاد رو حل میکنه اما یک پیچیدگی جدید به وجود میاره. شما و همکارانتون باید بدونید از یک روش و محل دیگه ای برای لود مسیرها استفاده کردین. در صورتی که توقع میره روتها و تعریفشون در پوشه routes باشن.
تعریف فایل روتها در routes/web.php یا routes/api.php
به عنوان یک روش ساده و واضحتر میتونید posts.php مثال قبل رو داخل دو فایل پیشفرض لاراول require کنید.
// `routes/api.php` file
require __DIR__ . '/resource/posts.php';
require __DIR__ . '/resource/orders.php';
require __DIR__ . '/resource/payments.php';
require __DIR__ . '/resource/deliveries.php';
// ...
استفاده از Route Groups
همون روش قبلی با این تفاوت که جای require از Route Groups استفاده میشه.
// `routes/api.php` file
Route::prefix('posts')->as('posts:')->middleware(['auth'])->group(
base_path('routes/resources/posts.php'),
);
Route::prefix('orders')->as('orders:')->middleware(['auth'])->group(
base_path('routes/resources/orders.php'),
);
// ...