بی آکادمی
آموزش پایتون
هوش مصنوعی
دانلود و نصب لینوکس
داکر دسکتاپ
VS Code
آموزش لاراول
گیت و گیت هاب
آموزش HTML
آموزش CSS
فلکس باکس
جاوااسکریپت
TypeScript
فروشگاه اینترنتی
اپلیکیشن موبایل
آموزش اکسل
آموزش SQL
آموزش MySQL
آموزش PHP

آموزش جامع کنترلرها در لاراول


🎯 اهداف یادگیری

  • درک مفهوم کنترلرها در معماری MVC
  • یادگیری ایجاد کنترلرهای پایه در لاراول
  • کار با متدهای کنترلر و Route Binding
  • استفاده از Resource Controller برای عملیات CRUD
  • مدیریت وابستگی‌ها با Dependency Injection

📌 کنترلر چیست؟

کنترلرها قلب برنامه‌های لاراول هستند که منطق برنامه را مدیریت می‌کنند و بین Model و View ارتباط برقرار می‌کنند:

php
<?php
namespace App\Http\Controllers;
class UserController extends Controller
{
public function show($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}

وظایف اصلی کنترلرها:

  • درخواست‌های کاربر را پردازش می‌کنند (Request Handling)
  • با مدل‌ها تعامل دارند (Data Retrieval)
  • نمایش مناسب را انتخاب می‌کنند (View Selection)

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

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

bash
php artisan make:controller PostController

ساختار فایل کنترلر:

php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
// متدهای کنترلر اینجا تعریف می‌شوند
}

📌 اتصال کنترلر به Route

برای استفاده از کنترلر، باید آن را به Route متصل کنیم:

php
// routes/web.php
use App\Http\Controllers\PostController;
// روش ساده
Route::get('/posts', [PostController::class, 'index']);
// روش با نام Route
Route::get('/posts/{id}', [PostController::class, 'show'])->name('posts.show');

انواع متدهای کنترلر:

  • متدهای اصلی: index, create, store, show, edit, update, destroy
  • متدهای سفارشی: هر متد دیگری که نیاز دارید می‌توانید تعریف کنید

📌 کنترلرهای Resource

برای عملیات CRUD می‌توانید از Resource Controller استفاده کنید:

bash
php artisan make:controller ProductController --resource

سپس در routes/web.php:

php
Route::resource('products', ProductController::class);

متدهای Resource Controller:

متد مسیر توضیح
index GET /products نمایش لیست محصولات
create GET /products/create فرم ایجاد محصول جدید
store POST /products ذخیره محصول جدید
show GET /products/{id} نمایش یک محصول
edit GET /products/{id}/edit فرم ویرایش محصول
update PUT/PATCH /products/{id} به‌روزرسانی محصول
destroy DELETE /products/{id} حذف محصول

📌 Dependency Injection در کنترلرها

لاراول به صورت خودکار وابستگی‌های مورد نیاز کنترلر را تزریق می‌کند:

php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Services\PaymentService;
class OrderController extends Controller
{
protected $paymentService;
public function __construct(PaymentService $paymentService)
{
$this->paymentService = $paymentService;
}
public function store(Request $request)
{
$this->validate($request, [
'amount' => 'required|numeric',
]);
$payment = $this->paymentService->process($request->amount);
return redirect()->route('orders.show', $payment->order_id);
}
}

انواع Dependency Injection:

  • Constructor Injection: برای وابستگی‌های ضروری در کل کلاس
  • Method Injection: برای وابستگی‌های مورد نیاز فقط در یک متد

📌 تمرین عملی

یک کنترلر برای مدیریت مقالات (Blog) ایجاد کنید:

bash
php artisan make:controller BlogController --resource --model=Blog

راهنمای تمرین:

  1. تمامی متدهای CRUD را پیاده‌سازی کنید
  2. از Route Model Binding استفاده کنید
  3. اعتبارسنجی را برای فرم‌ها اضافه کنید
  4. پیام‌های مناسب برای کاربران برگردانید

📌 قدم بعدی

در درس بعدی با مدل‌ها و Eloquent ORM در لاراول آشنا خواهیم شد!