کنترلر در لاراول، در این مطلب کاربرد کنترلرها در فریم ورک محبوب لاراول را بررسی می کنیم و با نحوه ایجاد و مدیریت آنها آشنا می شویم.
در ابتدا اجازه بدید یک تعریف جامع از کنترلر داشته باشیم.
کنترلر در لاراول چیست؟
دریافت درخواست های ارسالی از مرورگر به واسطه فایل های Route، کدینگ ما را ناخوانا و درپروژه های متوسط و بزرگ مدیریت آنها را دشوار می کند.
ما به جای اینکه تمام منطق رسیدگی به درخواست ها را در فایل های مسیر خود یا route ها تعریف کنیم،آنها را استفاده از کلاس های “کنترل کننده” یا همان “Controller” ها سازماندهی می کنیم.
کنترلرها می توانند منطق رسیدگی به درخواست مرتبط را در یک کلاس واحد گروه بندی کنند.
برای مثال، یک کلاس UserController ممکن است تمام درخواستهای دریافتی مربوط به کاربران، از جمله نمایش، ایجاد، بهروزرسانی و حذف کاربران را مدیریت کند.
کنترلرها در لاراول به صورت پیش فرض، در فهرست برنامه/Http/Controllers ذخیره می شوند.
ایجاد کنترلر در لاراول
کنترلر ها در لاراول به دوشکل ساده و کامل ایجاد می شوند.
منظور از کنترلر ساده این هست که ما نیازی برای پردازش های CRUD به واسطه درخواست ارسالی برای این نوع کنترلر نداریم، مثلا فقط می خواهیم پیامی بازگشت داده شود و یا یک فایل view بازگردانده شود.
ایجاد کنترلر ساده در لاراول
برای ایجاد یک کنترلر ساده در لاراول از دستور زیر استفاده می کنیم، نکته اینکه حرف اول رو با حروف بزرگ شروع می کنیم و در مسیر پروژه باید باشیم.
php artisan make:controller PostController
حال اگر به مسیر کنترل ها بروید کنترل ایجاد شده رو مشاهده خواهید کرد.
app -> Http -> Controllers -> PostController.php
در کنترلر ها ما توابعی رو می نویسیم که به واسطه ورود هر درخواست و نوع آن، تابع مربوطه فراخوانی و دستورات آن اجرا می شود.
مثلا اگر دستور حذف آمد متد destroy یا delete را که از قبل در کنترلر نوشتیم فراخوانی می کنیم و به همین شکل برای سایر درخواست ها.
در اینجا من می خوام تنها یک پیام رو بازگشت بدم، برای این کار فایل کنترلر “PostController.php” رو باز می کنم و متد index رو به شکل زیر در آن می نویسم.
متد بالا رو می تونیم با استفاده از متدهای جادویی PHP که در اینجا invoke نام دارند و تنها برای پردازش های تک درخواستی هستند بدین شکل هم بنویسیم.
public function __invoke()
{
return view('index');
}
تا زمانی که کاربر درخواستی رو برای کنترلر من ارسال نکند متد نوشته شده اجرا نمی شود، پس برای استفاده از آن باید یک درخواست از طریق مرورگر برای آن ارسال کنم.
همانطور که می دونید ما در خواست ها رو از فایل های route می گیریم و به کنترلر مربوطه ارسال می کنیم، برای این کار وارد پوشه routes میشم و فایل “web.php” رو باز می کنم، کدهای زیر رو برای فراخوانی متد index که در کنترلم ایجاد کردم می نویسم.
اگر از نوع “invoke” نوشتید بدین شکل فراخوانی کنید.
Route::get('/', HomeController::class);
در خط 6 نحوه آدرس دهی و فراخوانی کلاس و متد نوشته شده از کنترلر “PostController” را مشاهده می کنید.
بدین شکل اگر در مرورگر کاربر بعد از آدرس سایت “blog/” را وارد کند پیام نوشته شده در متد “index” به او نمایش داده می شود.
ایجاد کنترلر کامل (پیشرفته) در لاراول
در مثال قبل دیدیم که به چه شکل می تونیم یک کنترلر ساده ایجاد و از اون برای پاسخ به یک در خواست استفاده کنیم که اصطلاحا به آنها “invoke” گفته می شود.
حالا سوال پیش میاد ما اگر نیاز باشه درخواست های CRUD که شامل ایجاد، بروزرسانی، خواندن و حذف رکوردی باشد رو مدیریت کنیم باید برای هر کدام یک متد مجزا بنویسیم؟
اگر بخواین می تونید این کار رو با همان کنترلر ساده انجام بدید و متدهای خودتون رو بنویسید اما لاراول این کار رو برای ما ساده تر کرده!
ما می تونیم زمان ایجاد کنترلر در خط فرمان مشخص کنیم که این کنترلر از نوع کامل باشه، نوع کامل یعنی شامل همه متدهای مورد نیاز جهت پردازش های CRUD رو در خودش داشته باشه.
برای این کار از flag یا resource– در انتهای دستور ایجاد کنترلر به شکل زیر استفاده می کنیم.
php artisan make:controller PostController --resource
حال اگر کنترلر “PostController” رو باز کنید محتوای آن به شکل زیر خواهد بود.
حال برای اینکه به تمام متدهای ایجاد شده کنترلر در سمت فایل مسیر یا روت دسترسی داشته باشیم فایل “web.php” در پوشه “routes” رو باز می کنم و بدین شکل کد مربوطه رو می نویسم.
در ترمینال دستور زیر رو وارد کنید تا لیست تمام روت های ایجاد شده رو مشاه کنید.
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
جمع بندی
در این مقاله سعی کردم علاوه بر معرفی کنترلر ها نوحه ایجاد انوع آن و همچنین کار با آنها را در فریم ورک لاراول توضیح بدم. امیدوارم این مطلب براتون مفید واقع شده باشه.
لطفا اگر نظر و پیشنهادی در خصوص مطالب و پیشبرد آنها دارید خوشحال میشم در قسمت دیدگاه ها مطرح بفرمایید.