Resource Controllers ใน Laravel คือ Controller ที่สร้างขึ้นเพื่อจัดการ CRUD (Create, Read, Update, Delete) ได้อย่างสะดวกและเป็นระบบ โดย Laravel มีคำสั่งที่ช่วยให้เราสามารถสร้าง Controller ที่มีฟังก์ชันการทำงาน CRUD พื้นฐานมาให้พร้อมใช้งานในทันที ทำให้นักพัฒนาสามารถสร้างแอปพลิเคชันที่ต้องการจัดการข้อมูลในรูปแบบมาตรฐานได้ง่ายขึ้น
การสร้าง Resource Controller
ในการสร้าง Resource Controller สามารถใช้คำสั่ง Artisan เพื่อสร้าง Controller ที่ประกอบด้วยเมธอดพื้นฐานที่ใช้ใน CRUD ทั้งหมดดังนี้
php artisan make:controller ProductController --resource
หลังจากรันคำสั่งนี้ ระบบจะสร้างไฟล์ ProductController.php
ภายในโฟลเดอร์ app/Http/Controllers
และประกอบไปด้วยเมธอดต่างๆ ที่ใช้จัดการข้อมูลตามมาตรฐาน CRUD ได้แก่:
index
– แสดงรายการทั้งหมดcreate
– แสดงแบบฟอร์มสำหรับสร้างข้อมูลใหม่store
– เก็บข้อมูลใหม่ลงในฐานข้อมูลshow
– แสดงข้อมูลเฉพาะรายการedit
– แสดงแบบฟอร์มสำหรับแก้ไขข้อมูลupdate
– อัปเดตข้อมูลในฐานข้อมูลdestroy
– ลบข้อมูลออกจากฐานข้อมูล
ตัวอย่างการใช้งาน Resource Controller
ในตัวอย่างนี้จะอธิบายการใช้งาน Resource Controller ของ ProductController
ที่สร้างขึ้น โดยแต่ละเมธอดทำหน้าที่ต่างกันดังนี้:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProductController extends Controller
{
// แสดงรายการสินค้าทั้งหมด
public function index()
{
return 'List of products';
}
// แสดงฟอร์มสร้างสินค้าใหม่
public function create()
{
return 'Form to create product';
}
// เก็บสินค้าใหม่ลงในฐานข้อมูล
public function store(Request $request)
{
return 'Store new product';
}
// แสดงสินค้ารายการเฉพาะโดยใช้ ID
public function show($id)
{
return 'Display product ' . $id;
}
// แสดงฟอร์มแก้ไขสินค้า
public function edit($id)
{
return 'Form to edit product ' . $id;
}
// อัปเดตข้อมูลสินค้าลงในฐานข้อมูล
public function update(Request $request, $id)
{
return 'Update product ' . $id;
}
// ลบสินค้าออกจากฐานข้อมูล
public function destroy($id)
{
return 'Delete product ' . $id;
}
}
การกำหนด Route สำหรับ Resource Controller
Laravel มีฟังก์ชันที่ช่วยสร้างเส้นทางทั้งหมดที่จำเป็นสำหรับ Resource Controller โดยใช้คำสั่ง Route::resource()
ในไฟล์ routes/web.php
use App\Http\Controllers\ProductController;
Route::resource('products', ProductController::class);
คำสั่งนี้จะสร้างเส้นทางทั้งหมดที่ต้องการในการทำงาน CRUD ซึ่งประกอบด้วย:
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
เพื่อลบสินค้า
การนำไปใช้งาน
การใช้ Resource Controller ช่วยลดเวลาในการเขียนโค้ด และจัดการโครงสร้างโค้ดได้ง่ายขึ้น โดยสามารถนำมาใช้จัดการข้อมูลในแอปพลิเคชันที่มีการดำเนินการ CRUD อย่างสม่ำเสมอ เช่น การจัดการข้อมูลสินค้า ผู้ใช้ บทความ ฯลฯ นอกจากนี้ยังสามารถกำหนด Route ทั้งหมดในบรรทัดเดียวด้วย Route::resource()
ทำให้โค้ดมีความกระชับและเป็นระเบียบ