Controller ใน Laravel คืออะไร?
📌
Controller เป็นส่วนหนึ่งของโครงสร้าง MVC (Model-View-Controller) ใน Laravel ทำหน้าที่รับคำขอจากผู้ใช้ (Request) และควบคุมการทำงานของระบบ โดยสามารถประมวลผลข้อมูลจาก Model และส่งผลลัพธ์ไปแสดงใน View
📌 MVC โครงสร้างใน Laravel
- Model (M) → จัดการฐานข้อมูล
- View (V) → แสดงผลให้ผู้ใช้
- Controller (C) → ควบคุมและประมวลผลข้อมูล
📌 การสร้าง Controller ใน Laravel
เราสามารถสร้าง Controller ได้โดยใช้คำสั่ง Artisan
php artisan make:controller ProductController
คำสั่งนี้จะสร้างไฟล์ที่ app/Http/Controllers/ProductController.php
📌 ตัวอย่าง Controller (app/Http/Controllers/ProductController.php
)
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Product; // เรียกใช้งาน Model
class ProductController extends Controller
{
// แสดงรายการสินค้า (READ)
public function index()
{
$products = Product::all();
return view('products.index', compact('products')); // ส่งข้อมูลไปยัง View
}
// แสดงฟอร์มสร้างสินค้า (CREATE)
public function create()
{
return view('products.create');
}
// บันทึกข้อมูลสินค้าใหม่ (STORE)
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'price' => 'required|numeric',
]);
Product::create($request->all()); // บันทึกลงฐานข้อมูล
return redirect()->route('products.index')->with('success', 'Product created successfully.');
}
// แสดงรายละเอียดสินค้า (SHOW)
public function show($id)
{
$product = Product::find($id);
return view('products.show', compact('product'));
}
// แสดงฟอร์มแก้ไขสินค้า (EDIT)
public function edit($id)
{
$product = Product::find($id);
return view('products.edit', compact('product'));
}
// อัปเดตข้อมูลสินค้า (UPDATE)
public function update(Request $request, $id)
{
$request->validate([
'name' => 'required',
'price' => 'required|numeric',
]);
$product = Product::find($id);
$product->update($request->all());
return redirect()->route('products.index')->with('success', 'Product updated successfully.');
}
// ลบสินค้า (DELETE)
public function destroy($id)
{
Product::find($id)->delete();
return redirect()->route('products.index')->with('success', 'Product deleted successfully.');
}
}
📌 การกำหนด Route ให้ Controller
Laravel ใช้ Route เพื่อเชื่อมโยง URL กับ Controller
ให้ไปที่ routes/web.php
และเพิ่มโค้ดต่อไปนี้:
use App\Http\Controllers\ProductController;
Route::resource('products', ProductController::class);
📌 Route::resource()
จะสร้าง Route ทั้งหมดให้อัตโนมัติ ได้แก่
HTTP Method | URL | Action | Controller Method |
---|---|---|---|
GET | /products | แสดงสินค้าทั้งหมด | index() |
GET | /products/create | แสดงฟอร์มเพิ่มสินค้า | create() |
POST | /products | บันทึกสินค้า | store() |
GET | /products/{id} | แสดงรายละเอียดสินค้า | show() |
GET | /products/{id}/edit | แสดงฟอร์มแก้ไขสินค้า | edit() |
PUT/PATCH | /products/{id} | อัปเดตสินค้า | update() |
DELETE | /products/{id} | ลบสินค้า | destroy() |
📌 ตัวอย่าง View (resources/views/products/index.blade.php
)
<!DOCTYPE html>
<html lang="en">
<head>
<title>Products</title>
</head>
<body>
<h1>Product List</h1>
<a href="{{ route('products.create') }}">Add New Product</a>
<table border="1">
<tr>
<th>ID</th>
<th>Name</th>
<th>Price</th>
<th>Actions</th>
</tr>
@foreach ($products as $product)
<tr>
<td>{{ $product->id }}</td>
<td>{{ $product->name }}</td>
<td>{{ $product->price }}</td>
<td>
<a href="{{ route('products.edit', $product->id) }}">Edit</a>
<form action="{{ route('products.destroy', $product->id) }}" method="POST">
@csrf
@method('DELETE')
<button type="submit">Delete</button>
</form>
</td>
</tr>
@endforeach
</table>
</body>
</html>
📌 Middleware กับ Controller
ถ้าเราต้องการให้ Controller ใช้งาน Middleware (เช่น Authentication) สามารถกำหนดได้ดังนี้
class ProductController extends Controller
{
public function __construct()
{
$this->middleware('auth'); // บังคับให้ล็อกอินก่อนใช้งาน Controller นี้
}
}
📌 การสร้าง API Controller
หากต้องการสร้าง API Controller สามารถใช้คำสั่งนี้
php artisan make:controller Api/ProductController --api
จากนั้นกำหนด routes/api.php
use App\Http\Controllers\Api\ProductController;
Route::apiResource('products', ProductController::class);
📌 สรุป
ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
---|---|---|
index() | แสดงรายการข้อมูล | GET /products |
create() | แสดงฟอร์มสร้างข้อมูล | GET /products/create |
store() | บันทึกข้อมูลใหม่ | POST /products |
show($id) | แสดงข้อมูลเดี่ยว | GET /products/{id} |
edit($id) | แสดงฟอร์มแก้ไข | GET /products/{id}/edit |
update($request, $id) | อัปเดตข้อมูล | PUT /products/{id} |
destroy($id) | ลบข้อมูล | DELETE /products/{id} |
✅ Controller ช่วยให้โค้ดแยกเป็นสัดส่วนและง่ายต่อการจัดการ
✅ สามารถใช้ Route Resource เพื่อลดจำนวนโค้ดที่ซ้ำซ้อน
✅ รองรับ Middleware เช่น Authentication ได้ง่าย
🚀 Controller เป็นหัวใจสำคัญของ Laravel ในการควบคุมการทำงานของระบบ!