سرفصل‌های آموزشی
آموزش مقدماتی لاراول
آشنایی با route ها

آشنایی با route ها

در این قسمت می خواهیم به سراغ route ها برویم و با فرم ساده روت ها آشنا شویم. در بخش آشنایی با ساختار فریمورک لاراول دیدیم که همه روت های برنامه ما در پوشه routes قرار دارند. اگر برنامه ما به صورت api است باید روت هایمان را درفایل api.php تعریف کنیم. در صورتی که برنامه ما یک وب اپلیکیشن کامل است، باید روت ها را در فایل web.php تعریف کنیم.

فایل web.php را باز کنید و بخش های کامنت شده آن را به همراه روت پیش فرض لاراول پاک کنید تا یک روت را خودمان از اول تعریف کنیم.

<?php

use Illuminate\Support\Facades\Route;

اکنون از facade مربوط به Route استفاده کنید. facade مفهومی در لاراول است که در این دوره به بررسی عمیق آن نمی پردازیم چرا که در سطح مقدماتی کمی پیچیده است. facade در واقع یک wrapper (در بر گیرنده) برای کلاسی است که کار با آن پیچیده و سخت است. تعداد زیادی facade در لاراول وجود دارد. وقتی از یکی از facade های لاراول استفاده می کنید، در اصل دارید با کلاسی پیچیده، به شیوه ای راحت ارتباط برقرار می کنید. از namespace کلاس Route میتوان متوجه شد که این کلاس در پوشه Facades قرار دارد.

اکنون به سراغ تعریف روت با استفاده از facade مربوط به آن می رویم. می خواهیم روت پیش فرضی که وجود داشت را بازسازی کنیم. از آن جایی که صفحه مورد نظر ما به درخواست های GET پاسخ می داد، متد get در  facadeمربوط به Route را صدا می زنیم.

<?php


use Illuminate\Support\Facades\Route;

Route::get();

در facade روت به ازای فعل های مختلف HTTP متد وجود دارد. برای نمونه، متد post زمانی که یک فرم را submit می کنیم استفاده می شود. متد های دیگر مانند patch و delete هم وجود دارند.

اولین ورودی متد get، مسیری است که می خواهیم به آن پاسخ بدهیم. در نمونه ما صفحه اصلی سایت است، به همین خاطر ورودی اول را ‘/’ قرار می دهیم. راه های مختلفی برای پاسخ دادن به یک روت وجود دارد که به آن ها action روت گفته می شود. action روت ها می توانند یک کنترلر یا یک کلاس عادی باشند. روش دیگر در معرفی کردن Action به روت به جای کلاس استفاده از closure است. برای این کار به ورودی دوم متد get یک anonymous function بدهید تا هر زمان که مسیر ‘/’ صدا زده می شود، این تابع اجرا شود. اکنون در این تابع یک رشته ساده برگردانید تا ببینیم چه اتفاقی می افتد. به طور معمول این کار را انجام نمی دهیم و به جای آن از view ها که بعدا با آن آشنا می شویم استفاده می کنیم.

<?php


use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return 'Home';

});

اکنون اگر آدرس localhost:8000 را در مروگر درخواست دهیم رشته Home را می بینیم. همانطور که گفته شد هرگز یک ساختار html را در این تابع ناشناس پیاده سازی نمی کنیم و برای این کار از view ها استفاده می کنیم.

به ازای هر صفحه ای که در برنامه دارید باید یک روت تعریف کنید. برای مثال اگر سایت شما صفحه "درباره ما" داشته باشد، باید یک مسیر جدید برای آن تعریف کنید.

<?php


use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return 'Home';

});

Route::get('/about', function () {
    return 'About';

});

اکنون اگر آدرس localhost:8000/about را در مرورگر وارد کنید، رشته About را مشاهده خواهید کرد. ممکن است در برنامه ای که توسعه می دهید تعداد زیادی روت وجود داشته باشد و بخواهید اطلاعات بیشتری درمورد آن ها کسب کنید. دوباره به لیست دستور های کنسول artisan بروید. در این لیست، بخش route دیده می شود. یکی از دستور های این بخش، route:list است. بیاید این دستور را اجرا کنیم تا ببینیم چه اتفاقی می افتد!

با اجرای این دستور یک لیست از تمام روت هایی که در برنامه تعریف شده است به همراه اطلاعاتی مثل متد (GET و POST و...)، مسیر، middleware، نام و... مشاهده می کنیم.

همانطور که گفته شد هنگام تعریف یک روت ما می توانیم متد HTTP و مسیر آن را تعریف کنیم. علاوه بر این موارد، می توان به روت ها یک نام هم اختصاص داد. این نام، هنگامی که در برنامه می خواهیم به روتی اشاره کنیم کاربرد دارد. برای نمونه، اگر به روت صفحه about یک نام اختصاص بدهیم و در کد های برنامه از آن نام برای اشاره به روت استفاده کنیم، هنگامی که آدرس این روت عوض می شود چون نام آن تغییر نمی کند، کد های برنامه ما هم دستخوش تغییر نمی شوند. با استفاده از متد name در facade مربوط به Route می توانیم برای روت هایمان نام انتخاب کنیم.

Route::get('/', function () {
    return 'Home';

})->name('home');

یکی دیگر از ویژگی های روت ها action است. در حال حاضر ما برای روت هایی که تعریف کردیم یک closure را به عنوان action قرار دادیم اما در ادامه دوره از کنترلر ها به عنوان action روت هایمان استفاده خواهیم کرد. 

امیدوارم مفاهیم پایه ای درمورد روت ها را یاد گرفته باشید. در قسمت بعد با پارامتر در روت ها آشنا خواهیم شد.