آموزش جامع کنترلرها در لاراول
🎯 اهداف یادگیری
- درک مفهوم کنترلرها در معماری MVC
- یادگیری ایجاد کنترلرهای پایه در لاراول
- کار با متدهای کنترلر و Route Binding
- استفاده از Resource Controller برای عملیات CRUD
- مدیریت وابستگیها با Dependency Injection
📌 کنترلر چیست؟
کنترلرها قلب برنامههای لاراول هستند که منطق برنامه را مدیریت میکنند و بین Model و View ارتباط برقرار میکنند:
php
<?phpnamespace 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
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class PostController extends Controller{ // متدهای کنترلر اینجا تعریف میشوند}
📌 اتصال کنترلر به Route
برای استفاده از کنترلر، باید آن را به Route متصل کنیم:
php
// routes/web.phpuse App\Http\Controllers\PostController;// روش سادهRoute::get('/posts', [PostController::class, 'index']);// روش با نام RouteRoute::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
<?phpnamespace 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
راهنمای تمرین:
- تمامی متدهای CRUD را پیادهسازی کنید
- از Route Model Binding استفاده کنید
- اعتبارسنجی را برای فرمها اضافه کنید
- پیامهای مناسب برای کاربران برگردانید
📌 قدم بعدی
در درس بعدی با مدلها و Eloquent ORM در لاراول آشنا خواهیم شد!