استفاده از Route در Laravel

استفاده از Route در Laravel: یک راهنمای جامع

استفاده از Route در Laravel: یک راهنمای جامع

Laravel، فریم‌ورک محبوب PHP، با ارائه ابزارهای قدرتمند، توسعه وب را تسهیل می‌کند. یکی از مهم‌ترین این ابزارها، سیستم مسیریابی (Routing) است. مسیریابی، قلب هر برنامه وب است و تعیین می‌کند که چگونه درخواست‌های HTTP به کد برنامه شما هدایت شوند. این مقاله به بررسی عمیق و کاربردی سیستم مسیریابی در Laravel می‌پردازد.

مقدمه‌ای بر مسیریابی در Laravel

در Laravel، فایل‌های مسیریابی در دایرکتوری routes قرار دارند. سه فایل اصلی مسیریابی وجود دارد:

  • routes/web.php: برای مسیریابی درخواست‌های وب (مانند درخواست‌های GET و POST از طریق مرورگر).
  • routes/api.php: برای مسیریابی درخواست‌های API (معمولاً برای برنامه‌های موبایل یا سرویس‌های دیگر).
  • routes/console.php: برای تعریف دستورات Artisan.

هر مسیر (Route) در Laravel، یک URL را به یک کنترلر یا یک Closure (تابع بی‌نام) مرتبط می‌کند. وقتی کاربر یک URL خاص را در مرورگر خود وارد می‌کند، Laravel با استفاده از فایل‌های مسیریابی، درخواست را به کد مربوطه هدایت می‌کند.

تعریف مسیرهای ساده

ساده‌ترین راه برای تعریف یک مسیر، استفاده از متد Route::get() است. این متد یک URL و یک Closure را به عنوان آرگومان می‌گیرد. Closure، کدی است که وقتی URL مورد نظر درخواست شود، اجرا می‌شود.

Route::get('/', function () {
    return 'سلام دنیا!';
});

در این مثال، وقتی کاربر به آدرس ریشه (/) سایت مراجعه کند، عبارت “سلام دنیا!” نمایش داده می‌شود.

متدهای دیگری نیز برای تعریف مسیرها وجود دارند:

  • Route::post(): برای درخواست‌های POST.
  • Route::put(): برای درخواست‌های PUT (معمولاً برای به‌روزرسانی منابع).
  • Route::delete(): برای درخواست‌های DELETE (معمولاً برای حذف منابع).
  • Route::patch(): برای درخواست‌های PATCH (برای به‌روزرسانی جزئی منابع).
  • Route::options(): برای درخواست‌های OPTIONS.
  • Route::any(): برای پذیرش هر نوع درخواست HTTP.
  • Route::match(): برای پذیرش چندین نوع درخواست HTTP.

پارامترهای مسیر

اغلب اوقات، نیاز داریم که اطلاعاتی را از URL دریافت کنیم. این کار با استفاده از پارامترهای مسیر انجام می‌شود.

Route::get('/users/{id}', function ($id) {
    return 'شناسه کاربر: ' . $id;
});

در این مثال، {id} یک پارامتر مسیر است. وقتی کاربر به آدرس /users/123 مراجعه کند، مقدار 123 به عنوان آرگومان به Closure ارسال می‌شود.

محدودیت‌های پارامترها

می‌توانیم محدودیت‌هایی را برای پارامترهای مسیر اعمال کنیم. به عنوان مثال، می‌توانیم مشخص کنیم که پارامتر id باید یک عدد باشد.

Route::get('/users/{id}', function ($id) {
    return 'شناسه کاربر: ' . $id;
})->where('id', '[0-9]+');

در این مثال، اگر کاربر به آدرس /users/abc مراجعه کند، Laravel یک خطای 404 برمی‌گرداند.

نام‌گذاری مسیرها

نام‌گذاری مسیرها، امکان استفاده از نام مسیر به جای URL را فراهم می‌کند. این کار، نگهداری و تغییر URLها را آسان‌تر می‌کند.

Route::get('/users/{id}', function ($id) {
    return 'شناسه کاربر: ' . $id;
})->name('users.show');

حالا می‌توانیم از تابع route() برای تولید URL مربوط به این مسیر استفاده کنیم:

$url = route('users.show', ['id' => 123]);
// $url برابر است با /users/123

گروه‌بندی مسیرها

می‌توانیم مسیرها را در گروه‌ها سازماندهی کنیم. این کار، خوانایی و نگهداری کد را بهبود می‌بخشد.

Route::group(['prefix' => 'admin', 'middleware' => ['auth']], function () {
    Route::get('/dashboard', function () {
        return 'صفحه داشبورد';
    });

    Route::get('/users', function () {
        return 'لیست کاربران';
    });
});

در این مثال، تمام مسیرهای داخل گروه، پیشوند admin را دارند و نیاز به احراز هویت (auth) دارند.

Middleware

Middlewareها، لایه‌هایی هستند که قبل و بعد از اجرای یک مسیر اجرا می‌شوند. می‌توان از Middlewareها برای انجام کارهایی مانند احراز هویت، بررسی مجوزها، یا ثبت درخواست‌ها استفاده کرد.

Resource Controllers

Resource Controllers، راهی آسان برای ایجاد مسیرهای CRUD (Create, Read, Update, Delete) برای یک منبع خاص هستند.

Route::resource('photos', 'PhotoController');

این خط کد، مسیرهای زیر را ایجاد می‌کند:

  • GET /photos: نمایش لیست عکس‌ها (index).
  • GET /photos/create: نمایش فرم ایجاد عکس (create).
  • POST /photos: ایجاد یک عکس جدید (store).
  • GET /photos/{photo}: نمایش یک عکس خاص (show).
  • GET /photos/{photo}/edit: نمایش فرم ویرایش عکس (edit).
  • PUT /photos/{photo}: به‌روزرسانی یک عکس (update).
  • DELETE /photos/{photo}: حذف یک عکس (destroy).

Route Model Binding

Route Model Binding، راهی برای تزریق یک مدل به یک مسیر است. به عنوان مثال، می‌توانیم یک مدل User را به یک مسیر با استفاده از شناسه آن تزریق کنیم.

Route::get('/users/{user}', function (AppModelsUser $user) {
    return 'نام کاربر: ' . $user->name;
});

در این مثال، Laravel به طور خودکار یک کاربر با شناسه مشخص شده را از پایگاه داده پیدا می‌کند و آن را به Closure تزریق می‌کند.

Rate Limiting

Rate Limiting، راهی برای محدود کردن تعداد درخواست‌هایی است که یک کاربر می‌تواند در یک بازه زمانی مشخص ارسال کند. این کار، از سوء استفاده از API جلوگیری می‌کند.

Route::get('/api/users', function () {
    return AppModelsUser::all();
})->middleware('rate:60');

در این مثال، هر کاربر می‌تواند حداکثر 60 درخواست در دقیقه به این مسیر ارسال کند.

نتیجه‌گیری

سیستم مسیریابی در Laravel، ابزاری قدرتمند و انعطاف‌پذیر است که به شما امکان می‌دهد برنامه‌های وب پیچیده را به راحتی توسعه دهید. با استفاده از مفاهیم و تکنیک‌های ارائه شده در این مقاله، می‌توانید مسیریابی را در برنامه‌های Laravel خود به طور موثر مدیریت کنید و تجربه کاربری بهتری را ارائه دهید.