Appearance
🛣️ Routes & Controllers
ใน Laravel การกำหนดเส้นทาง (Routes) และการควบคุมการทำงาน (Controllers) เป็นหัวใจสำคัญในการสร้าง API
📍 1. API Routes (routes/api.php)
สำหรับ API เราจะทำงานในไฟล์ routes/api.php. ทุก Route ที่ประกาศในไฟล์นี้จะมี prefix /api นำหน้าโดยอัตโนมัติ
รูปแบบการเขียน Route เบื้องต้น
php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;
// 1. แบบ Basic Closure (ไม่แนะนำสำหรับงานจริง)
Route::get('/hello', function () {
return ['message' => 'Hello World'];
});
// 2. แบบเรียกใช้ Controller (แนะนำ)
Route::get('/products', [ProductController::class, 'index']);
Route::post('/products', [ProductController::class, 'store']);
Route::get('/products/{id}', [ProductController::class, 'show']);
Route::put('/products/{id}', [ProductController::class, 'update']);
Route::delete('/products/{id}', [ProductController::class, 'destroy']);Route Resource (ทางลัด)
แทนที่จะเขียนทีละบรรทัด เราสามารถใช้คำสั่งเดียวเพื่อสร้าง Route ครบทั้ง 5 แบบ (Index, Store, Show, Update, Destroy)
php
Route::apiResource('products', ProductController::class);ตรวจสอบ Route ทั้งหมดด้วยคำสั่ง:
bash
php artisan route:list🎮 2. Controllers (app/Http/Controllers)
Controller มีหน้าที่รับ Request จาก Route, ประมวลผล (อาจจะเรียก Model), และส่ง Response กลับไป
สร้าง Controller ด้วย Artisan
bash
php artisan make:controller ProductController --apiFlag --api จะช่วยสร้าง method ที่จำเป็นสำหรับ API ให้โดยอัตโนมัติ (index, store, show, update, destroy)
โครงสร้างภายใน Controller
php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Product; // อย่าลืม import Model
class ProductController extends Controller
{
// GET /api/products
public function index()
{
return Product::all(); // ส่งข้อมูลทั้งหมดกลับเป็น JSON
}
// POST /api/products
public function store(Request $request)
{
// 1. Validate ข้อมูล
$request->validate([
'name' => 'required',
'price' => 'required|numeric'
]);
// 2. บันทึกข้อมูล
return Product::create($request->all());
}
// GET /api/products/{id}
public function show(string $id)
{
return Product::findOrFail($id);
}
// PUT /api/products/{id}
public function update(Request $request, string $id)
{
$product = Product::findOrFail($id);
$product->update($request->all());
return $product;
}
// DELETE /api/products/{id}
public function destroy(string $id)
{
return Product::destroy($id);
}
}🛡 3. Validation
Laravel มีระบบตรวจสอบข้อมูลที่ง่ายและทรงพลัง ตัวอย่างการ validate ใน method store:
php
$validated = $request->validate([
'title' => 'required|max:255',
'body' => 'required',
'email' => 'email:rfc,dns'
]);หากข้อมูลไม่ผ่าน validation Laravel จะส่ง response 422 Unprocessable Entity พร้อมรายละเอียด error กลับไปให้ Frontend โดยอัตโนมัติ ไม่ต้องเขียน if-else เช็คเอง!
📤 4. API Resources (Option เสริม)
ถ้าต้องการปรับแต่งรูปแบบ JSON ก่อนส่งกลับ (เช่น เปลี่ยนชื่อ key หรือซ่อนบาง field) ให้ใช้ API Resource
bash
php artisan make:resource ProductResourceแก้ไขไฟล์ app/Http/Resources/ProductResource.php:
php
public function toArray($request)
{
return [
'id' => $this->id,
'product_name' => $this->name, // เปลี่ยน key
'price_thb' => number_format($this->price, 2), // จัด format
// 'created_at' => $this->created_at, // ซ่อนบาง field โดยไม่ใส่
];
}เรียกใช้ใน Controller:
php
use App\Http\Resources\ProductResource;
public function show($id) {
return new ProductResource(Product::findOrFail($id));
}