آموزش Laravel

کنترلر در لاراول

آشنایی با کنترلرها در لاراول

کنترلر در لاراول، در این مطلب کاربرد کنترلرها در فریم ورک محبوب لاراول را بررسی می کنیم و با نحوه ایجاد و مدیریت آنها آشنا می شویم.

آشنایی با کنترلرها در لاراول

آشنایی با کنترلرها در لاراول

 

در ابتدا اجازه بدید یک تعریف جامع از کنترلر داشته باشیم.

 

کنترلر در لاراول چیست؟

دریافت درخواست های ارسالی از مرورگر به واسطه فایل های Route، کدینگ ما را ناخوانا و درپروژه های متوسط و بزرگ مدیریت آنها را دشوار می کند.

ما به جای اینکه تمام منطق رسیدگی به درخواست ها را در فایل های مسیر خود یا route ها تعریف کنیم،آنها را استفاده از کلاس های “کنترل کننده” یا همان “Controller” ها سازماندهی می کنیم.

کنترلرها می توانند منطق رسیدگی به درخواست مرتبط را در یک کلاس واحد گروه بندی کنند.

برای مثال، یک کلاس UserController ممکن است تمام درخواست‌های دریافتی مربوط به کاربران، از جمله نمایش، ایجاد، به‌روزرسانی و حذف کاربران را مدیریت کند.

کنترلرها در لاراول به صورت پیش فرض، در فهرست برنامه/Http/Controllers ذخیره می شوند.

 

ایجاد کنترلر در لاراول

کنترلر ها در لاراول به دوشکل ساده و کامل ایجاد می شوند.

منظور از کنترلر ساده این هست که ما نیازی برای پردازش های CRUD به واسطه درخواست ارسالی برای این نوع کنترلر نداریم، مثلا فقط می خواهیم پیامی بازگشت داده شود و یا یک فایل view بازگردانده شود.

 

ایجاد کنترلر ساده در لاراول

برای ایجاد یک کنترلر ساده در لاراول از دستور زیر استفاده می کنیم، نکته اینکه حرف اول رو با حروف بزرگ شروع می کنیم و در مسیر پروژه باید باشیم.

				
					php artisan make:controller PostController
				
			

حال اگر به مسیر کنترل ها بروید کنترل ایجاد شده رو مشاهده خواهید کرد.

				
					app -> Http -> Controllers -> PostController.php
				
			

در کنترلر ها ما توابعی رو می نویسیم که به واسطه ورود هر درخواست و نوع آن، تابع مربوطه فراخوانی و دستورات آن اجرا می شود.

مثلا اگر دستور حذف آمد متد destroy یا delete را که از قبل در کنترلر نوشتیم فراخوانی می کنیم و به همین شکل برای سایر درخواست ها.

در اینجا من می خوام تنها یک پیام رو بازگشت بدم، برای این کار فایل کنترلر “PostController.php” رو باز می کنم و متد index رو به شکل زیر در آن می نویسم.

				
					<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
    public function index() {
        return "This is index method from PostController";
    }
}

				
			

متد بالا رو می تونیم با استفاده از متدهای جادویی PHP که در اینجا invoke نام دارند و تنها برای پردازش های تک درخواستی هستند بدین شکل هم بنویسیم.

				
					 public function __invoke()
    {
        return view('index');   
    }
				
			

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

همانطور که می دونید ما در خواست ها رو از فایل های route می گیریم و به کنترلر مربوطه ارسال می کنیم، برای این کار وارد پوشه routes میشم و فایل “web.php” رو باز می کنم، کدهای زیر رو برای فراخوانی متد index که در کنترلم ایجاد کردم می نویسم.

				
					<?php

use App\Http\Controllers\PostController;
use Illuminate\Support\Facades\Route;

Route::get('/blog', [PostController::class, 'index']);

				
			

اگر از نوع “invoke” نوشتید بدین شکل فراخوانی کنید.

				
					Route::get('/', HomeController::class);
				
			

در خط 6 نحوه آدرس دهی و فراخوانی کلاس و متد نوشته شده از کنترلر “PostController” را مشاهده می کنید.

بدین شکل اگر در مرورگر کاربر بعد از آدرس سایت “blog/” را وارد کند پیام نوشته شده در متد “index” به او نمایش داده می شود.

ایجاد کنترلر ساده در فریم ورک لاراول

ایجاد کنترلر ساده در فریم ورک لاراول

 

ایجاد کنترلر کامل (پیشرفته) در لاراول

در مثال قبل دیدیم که به چه شکل می تونیم یک کنترلر ساده ایجاد و از اون برای پاسخ به یک در خواست استفاده کنیم که اصطلاحا به آنها “invoke” گفته می شود.

حالا سوال پیش میاد ما اگر نیاز باشه درخواست های CRUD که شامل ایجاد، بروزرسانی، خواندن و حذف رکوردی باشد رو مدیریت کنیم باید برای هر کدام یک متد مجزا بنویسیم؟

اگر بخواین می تونید این کار رو با همان کنترلر ساده انجام بدید و متدهای خودتون رو بنویسید اما لاراول این کار رو برای ما ساده تر کرده!

ما می تونیم زمان ایجاد کنترلر در خط فرمان مشخص کنیم که این کنترلر از نوع کامل باشه، نوع کامل یعنی شامل همه متدهای مورد نیاز جهت پردازش های CRUD رو در خودش داشته باشه.

برای این کار از flag یا resource– در انتهای دستور ایجاد کنترلر به شکل زیر استفاده می کنیم.

				
					php artisan make:controller PostController --resource
				
			

حال اگر کنترلر “PostController” رو باز کنید محتوای آن به شکل زیر خواهد بود.

				
					<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

				
			

حال برای اینکه به تمام متدهای ایجاد شده کنترلر در سمت فایل مسیر یا روت دسترسی داشته باشیم فایل “web.php” در پوشه “routes” رو باز می کنم و بدین شکل کد مربوطه رو می نویسم.

				
					<?php

use App\Http\Controllers\PostController;
use Illuminate\Support\Facades\Route;


//Route::get('/blog', [PostController::class, 'index']);
Route::resource('/blog', PostController::class);

				
			

در ترمینال دستور زیر رو وارد کنید تا لیست تمام روت های ایجاد شده رو مشاه کنید.

				
					php artisan route:list
				
			
لیست روت ها در لاراول

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

 

الان می خوام در متد “index” کنترلر به جای یک پیام متنی یک فایل “view” رو برگردونم.

برای این کار در پوشه “views” که در پوشه “resources” قرار داره یک فولدر جدید به نام “blog” می سازم و فایلی به نام “index.blade.php” در آن ایجاد می کنم و در نهایت محتوای متنی خودم رو درون یک تگ <h1> قرار می دم.

حالا وارد فایل “PostController.php” میشم و متد “index” رو به شکل زیر بازنویسی می کنم.

				
					 public function index()
    {
        return view('blog.index');
    }
				
			

بدین شکل با فراخوانی آدرس ایجاد شده در روت و پردازش متد کنترلر مربوطه محتوای فایل view ایجاد شده به نمایش در می آید.

				
					http://127.0.0.1:8000/blog
				
			

 

جمع بندی

در این مقاله سعی کردم علاوه بر معرفی کنترلر ها نوحه ایجاد انوع آن و همچنین کار با آنها را در فریم ورک لاراول توضیح بدم. امیدوارم این مطلب براتون مفید واقع شده باشه.

لطفا اگر نظر و پیشنهادی در خصوص مطالب و پیشبرد آنها دارید خوشحال میشم در قسمت دیدگاه ها مطرح بفرمایید.

 

آموزش های طراحی و برنامه نویسی وب

سایت رسمی لاراول

کاربرد HTML

 jQuery

جاوا اسکریپت در 1 ساعت

کاربرد CSS

آموزش ReactJS

صفر تا صد PHP

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *