- آموزش Laravel قسمت اول: آشنایی با لاراول
- آموزش Laravel قسمت دوم: نصب لاراول و چاپ Hello World
- آموزش Laravel قسمت سوم: مسیریابی و Controller در لاراول
- آموزش Laravel قسمت چهارم: Template Engine و مدیریت قالب با Blade
- آموزش Laravel قسمت پنجم: کار با دیتابیس و پایگاه داده و Eloquent
مسیریابی و Controllerها یکی از مهم ترین بخشهای یک نرم افزار تحت MVC هستند. که در این بخش قصد داریم شما را با مسیریابی و Controller در فریمورک لاراول آشنا کنیم.
همانطور که در قسمت دوم آموزش فریمورک لاراول ذکر شد، فایل مسیریابی در لاراول در مسیر app -> Http -> routes.php
قرار گرفته است؛ با استفاده از این فایل است که به عنوان مثال برای برنامه خود مشخص میکنید وقتی کاربر صفحه /about
را در خواست کرد، چه اطلاعاتی به او نمایش داده شود.
اطلاعات پیش فرض این فایل به شکل زیر است:
Route::get('/', function () {
return view('welcome');
});
مسیر یابی فوق اعلام میکند وقتی کاربر صفحه اصلی یعنی /
را در خواست کرد به او فایل view با نام welcome.blade.php
را از آدرس resources -> views
برای من باز کن.
در فایل welcome.blade.php
هر چه برای نمایش وجود داشته باشد نمایش داده میشود که در قسمت دوم از آموزش لاراول به شما گفتیم چگونه با ویرایش این فایل پیام Hello World!
را به نمایش در آورید.
در این آموزش ابتدا یک Controller ایجاد میکنیم و میبینیم چگونه با استفاده از Controller به صفحه نمایش خود مقدار ارسال کنیم.
controllerها فایلهایی هستند که اصلی ترین بخش سورس کد برنامه ما در آنها قرار میگیرد. وظیفه روتر هدایت کاربر به سمت Controller مناسب است. Controller پس از انجام محاسبات و یا آماده کردن خروجی آن را به فایلهای قالب ارسال میکند.
ابتدا سورس کدهای موجود در فایل routes.php
را حذف کرده و به جای آنها مسیر زیر را قرار میدهیم:
Route::get('/', 'MainController@index');
دستور فوق میگوید هنگام در خواست "/"
به کنترلی به نام MainController و تابع index مراجعه کن.
برای ایجاد Controller از دستور زیر در artisan استفاده میکنیم و یک Controller به نام MainController ایجاد میکنیم:
php artisan make:controller MainController
فایل فوق در آدرس app -> Http -> Controllers
ایجاد میشود.
نکته: البته الزامی وجود ندارد که از artisan برای ایجاد Controller استفاده کنید، و میتوانید فایلی مانند زیر ایجاد کنید:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class MainController extends Controller
{
//
}
نام این Controller به نام کلاس است. میتوانید هر فایل دیگری با سورس فوق ایجاد کنید و در آن تنها نام کلاس Controller و نام فایل را به یک نام متفاوت تغییر دهید.
حال دستورات زیر را درون کلاس MainController اضافه میکنیم:
public function index()
{
echo "Hello Hitos!"; die();
}
وقتی صفحه "/"
را در خواست دهید پیام Hello I'm From Controller به نمایش در میآید.
حال میخواهیم با استفاده از تابع فوق، view را نمایش دهیم. تابع index را به شکل زیر در میآوریم:
public function index()
{
$name= "hitos.ir";
return view('welcome', ['name' => $name]);
}
در سطر سوم یک متغیر به نام $name
تعریف کردیم. در سطر چهارم با دستور return view
یک قالب با نام welcome را از مسیر resources -> views
فراخوانی کرده و به آن متغیر name را ارسال میکنیم.
سورس کدهای موجود در فایل welcome.blade.php را به شکل زیر ویرایش میکنیم:
{{$name}}
نتیجه به شکل زیر به نمایش در میآید:
البته در لاراول امکان return کردن مقادیر به روشهای دیگر نیز وجود دارد:
روش اول:
public function index()
{
$name= "hitos.ir";
return view('welcome', compact('name'));
}
روش دوم:
public function index()
{
$name= "hitos.ir";
return view('welcome')->with('name', $name);
}
روش سوم:
public function index()
{
$name= "hitos.ir";
return view('welcome')->withName($name);
}
روشهای فوق را بیشتر توضیح نمیدهیم و با تست کردن متوجه طرز عملکردشان شوید.
نکته: در نسخههای قبلی laravel به جای view از View::make
استفاده میشد که همچنان نیز عمل میکند.
نکته: می توان لایه نمایش را به منظور نظم بیشتر در پوشههای خاصی در مسیر resources -> views
قرار داد. برای مسیر دهی در Controller نیز از یکی از دو روش زیر استفاده میکنیم:
return view('folder_name.template_name', ['name' => $name]);
return view('folder_name/template_name', ['name' => $name]);
نام گذاری روترها
تقریبا برای هر عملیاتی در فریمورک باید یک Router جدید بنویسید. هر Router با توجه به ماهیتی که دارد میتواند نامهای متنوعی داشته باشد.
مثلا فرض کنید یک Cms دارید و در این Cms میخواهید یک پست را نمایش دهید. برای داشتن چنین مسیری میتوانیم یک Router مانند زیر ایجاد کنیم:
Route::get('/show/{id}', 'MainController@show');
در Controller یک تابع به شکل زیر ایجاد میکنیم:
public function show($id)
{
return $id;
}
مسیریابی فوق خیلی ساده است، اگر صفحه /show/1
را در خواست دهید مقدار 1 را نمایش میدهد. هر چیزی به عنوان id قرار دهیم در خروجی چاپ میشود.