سلام! من آرش فدایی هستم و تو این قسمت از سری آموزشی لاراول ۱۲ قراره درباره روتینگ و کنترلرها صحبت کنیم. روتینگ قلب تپنده هر اپلیکیشن وب هست و کنترلرها هم مثل مغز عمل می‌کنن که منطق برنامه رو مدیریت می‌کنن. تو این مقاله، با هم یاد می‌گیریم چطور مسیرها رو تعریف کنیم، کنترلر بسازیم و یه صفحه ساده رو نمایش بدیم.

روتینگ در لاراول: تجربه شخصی من

وقتی تازه با لاراول شروع کردم، روتینگ برام یه کم گیج‌کننده بود. این همه روش برای تعریف مسیرها؟ کدومش بهتره؟ بعد از چند پروژه، فهمیدم که لاراول روتینگ رو خیلی انعطاف‌پذیر طراحی کرده تا هر جور که راحتید بتونید باهاش کار کنید. تو لاراول ۱۲، روتینگ حتی بهتر شده و ابزارهای جدیدش کار رو ساده‌تر کردن. من خودم عاشق اینم که چطور می‌تونم با چند خط کد یه مسیر جدید تعریف کنم و به کاربر نشون بدم.

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

روتینگ توی لاراول تو فایل routes/web.php انجام می‌شه. این فایل جاییه که مسیرهای وب اپلیکیشن‌تون رو تعریف می‌کنید. بیاید یه مسیر ساده بسازیم که یه پیام خوش‌آمدگویی نشون بده:

use Illuminate\Support\Facades\Route;

Route::get('/welcome', function () {
    return 'خوش اومدید به لاراول ۱۲!';
});

این کد یه مسیر GET تعریف می‌کنه که وقتی کاربر به آدرس /welcome بره، پیام “خوش اومدید به لاراول ۱۲!” رو می‌بینه. من خودم تو پروژه‌های اولیه‌ام اینجوری تست می‌کردم که ببینم لاراول درست کار می‌کنه یا نه. فقط کافیه سرور رو با php artisan serve اجرا کنید و به http://localhost:8000/welcome برید.

معرفی کنترلرها

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

اول، با Artisan یه کنترلر جدید می‌سازیم:

php artisan make:controller WelcomeController

این دستور یه فایل جدید به اسم WelcomeController.php توی پوشه app/Http/Controllers می‌سازه. حالا بیاید یه متد ساده تو این کنترلر تعریف کنیم:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class WelcomeController extends Controller
{
    public function index()
    {
        return view('welcome');
    }
}

تو این کد، متد index یه ویو به اسم welcome رو برمی‌گردونه. یه بار من فراموش کردم ویو رو درست تنظیم کنم و صفحه خطای 404 گرفتم. واسه همین همیشه چک کنید که فایل ویو وجود داشته باشه!

اتصال مسیر به کنترلر

حالا بیاید مسیر /welcome رو به کنترلر وصل کنیم. تو فایل routes/web.php این کد رو اضافه کنید:

use App\Http\Controllers\WelcomeController;

Route::get('/welcome', [WelcomeController::class, 'index']);

اینجا به لاراول گفتیم که وقتی کاربر به /welcome می‌ره، متد index از WelcomeController اجرا بشه. این روش خیلی تمیزتر از نوشتن منطق مستقیم تو فایل روته. من خودم تو پروژه‌های بزرگ همیشه از کنترلرها استفاده می‌کنم چون باعث می‌شه کدم منظم‌تر باشه.

ارسال داده به ویو

بیاید یه کم کار رو جالب‌تر کنیم. فرض کنید می‌خوایم یه اسم رو به ویو بفرستیم تا به کاربر نمایش بدیم. اول، فایل ویو رو توی resources/views/welcome.blade.php اصلاح می‌کنیم:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
    <meta charset="UTF-8">
    <title>خوش‌آمدگویی</title>
</head>
<body>
    <h1>سلام، {{ $name }}!</h1>
</body>
</html>

حالا تو WelcomeController متد index رو به این شکل تغییر می‌دیم:

public function index()
{
    return view('welcome', ['name' => 'دوست عزیز']);
}

اگه حالا به /welcome برید، می‌بینید که صفحه می‌گه “سلام، دوست عزیز!”. یه تجربه از خودم: اوایل که با Blade کار می‌کردم، یادم می‌رفت متغیرها رو درست پاس بدم و کلی خطا می‌گرفتم. همیشه چک کنید که متغیرها رو درست به ویو فرستادید.

روتینگ پیشرفته‌تر: پارامترها

لاراول به شما اجازه می‌ده مسیرهایی با پارامتر تعریف کنید. مثلاً فرض کنید می‌خوایم یه مسیر داشته باشیم که اسم کاربر رو از URL بگیره:

Route::get('/user/{name}', function ($name) {
    return 'سلام، ' . $name . '!';
});

حالا اگه به http://localhost:8000/user/ali برید، می‌بینید که می‌گه “سلام، ali!”. برای کنترلر هم می‌تونید همین کار رو کنید:

public function show($name)
{
    return view('welcome', ['name' => $name]);
}

و تو فایل routes/web.php:

Route::get('/user/{name}', [WelcomeController::class, 'show']);

اینجا پارامتر name از URL به متد show پاس می‌شه. من تو یکی از پروژه‌هام از این روش برای ساخت پروفایل‌های کاربری استفاده کردم و خیلی به کارم اومد.

نکات تکمیلی

  • نام‌گذاری مسیرها: می‌تونید برای مسیرها اسم بذارید تا بعداً راحت‌تر بهشون ارجاع بدید. مثلاً:

Route::get('/welcome', [WelcomeController::class, 'index'])->name('welcome');

بعد می‌تونید تو ویوها از route(‘welcome’) استفاده کنید. این کار تو پروژه‌های بزرگ خیلی به درد می‌خوره.

  • مدیریت خطاها: اگه کاربر به مسیری بره که وجود نداره، لاراول یه صفحه 404 نشون می‌ده. من خودم یه بار کلی وقت گذاشتم تا بفهمم چرا صفحه‌ام 404 می‌ده، فقط چون اسم مسیر رو اشتباه نوشته بودم!

  • لاراول ۱۲ و بهبودها: تو نسخه ۱۲، روتینگ سریع‌تر شده و ابزارهای جدید برای کش کردن مسیرها اضافه شده. تو قسمت‌های بعدی درباره این بهینه‌سازی‌ها بیشتر صحبت می‌کنیم.

قسمت بعدی قراره درباره مدل‌ها و Eloquent صحبت کنیم که به شما کمک می‌کنه با دیتابیس کار کنید. اگه سوالی دارید یا جایی گیر کردید، تو کامنت‌ها بپرسید. من همیشه از سوالای شما چیزای جدید یاد می‌گیرم!

تا قسمت بعدی، موفق باشید!