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 MethodURLActionController 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 ในการควบคุมการทำงานของระบบ!

Leave a Reply

Your email address will not be published. Required fields are marked *