ข้อมูลคลังความรู้
รายละเอียดเนื้อหา
Laravel 13 เริ่มทำงานจากไฟล์ไหน? ไล่เส้นทางตั้งแต่ Request จนแสดงผล
Laravel 13 เริ่มทำงานจากไฟล์ไหน? ไล่เส้นทางตั้งแต่ Request จนแสดงผล
เวลาเราเขียน Laravel เรามักเริ่มต้นกันที่ routes/web.php หรือสร้าง Controller แล้วเขียน Logic ของระบบ
แต่เคยสงสัยไหมว่า...
จริง ๆ แล้ว Laravel เริ่มทำงานจากไฟล์ไหน?
เมื่อเราเปิด
https://example.com/users
Laravel รู้ได้อย่างไรว่าต้องไป Route ไหน เรียก Controller ตัวไหน ผ่าน Middleware อะไร และสุดท้ายเอา View ไหนกลับมาแสดง?
บทความนี้จะพาไล่ Flow การทำงานของ Laravel 13 ตั้งแต่ Request แรกที่เข้ามา จนกลายเป็น Response ที่ส่งกลับไปยัง Browser
ภาพรวมก่อน
ถ้ามองแบบง่ายที่สุด Flow ของ Laravel จะประมาณนี้
Browser / Client
↓
Web Server (Apache / Nginx)
↓public/index.php
↓bootstrap/app.php
↓
Laravel Application
↓
Middleware
↓routes/web.php หรือ Route อื่น ๆ
↓
Controller
↓
Model / Service / Database
↓
View / JSON Response
↓
Response กลับไปยัง Browser
ทีนี้เรามาไล่ทีละขั้นกัน
1. Browser ส่ง Request เข้ามา
สมมติผู้ใช้เปิด URL
https://example.com/users
Browser จะส่ง HTTP Request มายัง Server
แต่ Laravel ไม่ได้เริ่มทำงานจาก routes/web.php ทันที
ก่อนที่จะถึง Laravel จะมี Web Server เช่น Nginx หรือ Apache เป็นผู้รับ Request ก่อน
Web Server จะถูกตั้งค่าให้ Document Root ของ Laravel ชี้ไปที่
/public
และ Request ที่ Laravel ต้องจัดการจะถูกส่งเข้าสู่ไฟล์สำคัญคือ
public/index.php
ดังนั้นถ้ามีคนถามว่า
Laravel เริ่มต้นทำงานจากไฟล์ไหน?
สำหรับ HTTP Request คำตอบที่ง่ายที่สุดคือ
public/index.php
ไฟล์นี้คือ Entry Point ของ Laravel Application
2. public/index.php
เมื่อ Request เข้ามาถึง Laravel จุดเริ่มต้นหลักคือ
public/index.php
หน้าที่ของไฟล์นี้ไม่ได้มี Business Logic ของระบบ แต่ทำหน้าที่เริ่มต้น Laravel Application
สิ่งสำคัญที่เกิดขึ้นมีประมาณนี้
โหลด Composer Autoload
Laravel ต้องรู้จัก Class และ Package ต่าง ๆ ที่ติดตั้งผ่าน Composer
จึงมีการโหลด
vendor/autoload.php
ทำให้ Laravel สามารถใช้งาน Class จาก Framework, Package และ Class ที่เราเขียนใน Application ได้
จากนั้นจะเข้าสู่ขั้นตอน Bootstrap Application
3. bootstrap/app.php
ขั้นตอนต่อมาคือไฟล์
bootstrap/app.php
ไฟล์นี้สำคัญมากใน Laravel รุ่นใหม่
เพราะใช้สำหรับ สร้างและ Configure Laravel Application
ใน Laravel 13 เราจะพบโครงสร้างประมาณแนวคิดนี้
Application::configure(...)
จากนั้น Laravel สามารถกำหนดสิ่งต่าง ๆ เช่น
- Routing
- Middleware
- Exception Handling
- Application Configuration
ได้จากกระบวนการ Bootstrap นี้
ตรงนี้เป็นหนึ่งในจุดที่คนที่เคยใช้ Laravel รุ่นเก่า เช่น Laravel 8 จะรู้สึกถึงความแตกต่างค่อนข้างชัด
เพราะ Laravel รุ่นใหม่ย้าย Configuration หลายอย่างมาอยู่ใน bootstrap/app.php
ตัวอย่างเช่นการกำหนด Middleware สามารถทำผ่าน
->withMiddleware(...)
ได้โดยตรง
4. Laravel สร้าง Application
หลังจากอ่าน bootstrap/app.php แล้ว Laravel จะสร้าง Application Instance ขึ้นมา
Application ตัวนี้เปรียบเสมือน ศูนย์กลางของระบบ Laravel
ภายในนั้นมีสิ่งสำคัญอย่าง Service Container ซึ่งมีหน้าที่จัดการ Dependency และ Object ต่าง ๆ ของ Framework และ Application
พูดง่าย ๆ คือ
public/index.php
เป็นประตูทางเข้า
ส่วน
bootstrap/app.php
เป็นขั้นตอนประกอบและเตรียม Laravel Application ให้พร้อมทำงาน
5. Laravel รับ HTTP Request
เมื่อ Application พร้อมแล้ว Request จาก Browser จะถูกส่งเข้าสู่กระบวนการจัดการ HTTP Request ของ Laravel
Laravel จะสร้าง Request Object ซึ่งสามารถเข้าถึงได้ผ่าน
Illuminate\Http\Request
ดังนั้นเวลาที่เราเขียน Controller แบบนี้
public function store(Request $request)
ตัว $request ก็คือ Object ที่ Laravel เตรียมมาจาก HTTP Request ที่เข้ามานั่นเอง
ภายใน Request อาจประกอบด้วยข้อมูลต่าง ๆ เช่น
- URL
- HTTP Method เช่น GET / POST / PUT / DELETE
- Query String
- Form Data
- JSON
- Cookies
- Headers
- Uploaded Files
6. Middleware เริ่มทำงาน
ก่อน Request จะไปถึง Controller อาจต้องผ่าน Middleware
Middleware เปรียบเสมือนด่านตรวจของ Request
ตัวอย่างเช่น
Browser → Middleware → Route → Controller
Middleware สามารถใช้ตรวจสอบเรื่องต่าง ๆ เช่น
- ผู้ใช้ Login หรือยัง
- Token ถูกต้องหรือไม่
- มี Permission หรือไม่
- Request มาจากแหล่งที่อนุญาตหรือไม่
- ตรวจสอบ Session
- จัดการ CORS
- ตรวจสอบ CSRF
ใน Laravel 13 การ Configure Middleware ของ Application จะทำผ่าน bootstrap/app.php เป็นหลัก
นี่จึงเป็นอีกจุดที่แตกต่างจาก Laravel รุ่นเก่าที่ Developer หลายคนคุ้นเคยกับ
app/Http/Kernel.php
Laravel รุ่นใหม่ไม่ได้ใช้โครงสร้าง Application แบบเดิมที่เราต้องเข้าไป Register Middleware ใน Kernel.php เหมือน Laravel 8 แล้ว
7. Laravel ตรวจสอบ Route
เมื่อ Request ผ่านกระบวนการที่เกี่ยวข้องแล้ว Laravel จะนำ URL และ HTTP Method ไปเทียบกับ Route ที่เรากำหนดไว้
เช่นใน
routes/web.php
สมมติเรามี
Route::get('/users', [UserController::class, 'index']);
แล้ว Browser เรียก
GET /users
Laravel จะพบว่า Request นี้ตรงกับ Route ดังกล่าว
จึงรู้ว่า
ต้องเรียก UserController และ Method index()
8. Controller เริ่มทำงาน
Laravel จะเรียก
UserController@index
เช่น
app/Http/Controllers/UserController.php
ภายใน Controller เราอาจเขียนประมาณว่า
$users = User::all();
จากนั้นส่งข้อมูลไปยัง View
return view('users.index', compact('users'));
Controller จึงทำหน้าที่เป็นตัวกลางในการรับ Request และควบคุมว่าจะให้ระบบทำอะไรต่อ
แต่ในระบบขนาดใหญ่ เราไม่ควรเอา Business Logic ทุกอย่างยัดไว้ใน Controller
อาจแยกออกเป็น
Controller → Service → Repository / Model
ตาม Architecture ที่เหมาะสมกับระบบ
9. Model ติดต่อ Database
ถ้า Controller หรือ Service ต้องการข้อมูลจาก Database อาจเรียกผ่าน Eloquent Model
เช่น
User::all()
Laravel จะใช้ Model เช่น
app/Models/User.php
ในการติดต่อกับ Database ตาม Configuration ของ Application
ค่าการเชื่อมต่อ Database โดยทั่วไปจะมาจาก Environment เช่น .env และ Configuration ที่เกี่ยวข้อง
เช่น
DB_CONNECTIONDB_HOSTDB_PORTDB_DATABASEDB_USERNAMEDB_PASSWORD
จากนั้น Laravel จะ Query Database และนำผลลัพธ์กลับมาให้ Application
Flow จึงกลายเป็น
Controller → Model → Database → Model → Controller
10. Controller ส่งข้อมูลไปยัง View
เมื่อ Controller ได้ข้อมูลเรียบร้อยแล้ว อาจส่งไปยัง Blade View
เช่น
return view('users.index', compact('users'));
Laravel ก็จะไปหา View ที่เกี่ยวข้อง เช่น
resources/views/users/index.blade.php
Blade Template จะถูกประมวลผลร่วมกับข้อมูล $users
แล้วสร้าง HTML ออกมา
ตัวอย่างแนวคิด
Controller
↓
ส่ง $users
↓
Blade View
↓
สร้าง HTML
↓
Response
11. Laravel สร้าง Response
หลังจากประมวลผลเสร็จ Laravel จะสร้าง HTTP Response
Response ไม่จำเป็นต้องเป็น HTML เสมอไป
อาจเป็น
- HTML
- JSON
- File
- Redirect
- Stream
- Download
เช่น Web Application ทั่วไปอาจ
return view(...)
ส่วน API อาจ
return response()->json(...)
สุดท้าย Response จะเดินทางย้อนกลับผ่าน Middleware ที่เกี่ยวข้อง และ Laravel จะส่ง HTTP Response กลับออกไปยัง Client
12. Browser ได้ผลลัพธ์
Browser ได้ HTTP Response กลับมา
ถ้าเป็น HTML ก็ Render หน้าเว็บไซต์
ถ้าเป็น API Client ก็อาจได้รับ JSON เช่น
{"status": true, "data": [...]}
ถือเป็นการจบ Request Lifecycle หนึ่งรอบ
สรุป Flow ทั้งหมด
ถ้าเรารวมทั้งหมดเข้าด้วยกัน จะเห็นภาพประมาณนี้
User / Browser
↓ Request
Apache / Nginx
↓
public/index.php
↓
โหลด vendor/autoload.php
↓
bootstrap/app.php
↓
Laravel Application
↓
HTTP Request
↓
Middleware
↓
Router
↓
routes/web.php / Routes อื่น ๆ
↓
Controller
↓
Service / Business Logic
↓
Model / Database
↓
Controller
↓
Blade View หรือ JSON
↓
HTTP Response
↓
Middleware
↓
Browser / Client
แล้ว .env ทำงานตอนไหน?
อีกไฟล์หนึ่งที่หลายคนอาจสงสัยคือ
.env
มันไม่ได้เป็น Entry Point ของ Laravel
แต่เป็นไฟล์ Environment Configuration ที่ Application ใช้ประกอบการตั้งค่าต่าง ๆ เช่น
- Database
- Application Environment
- Debug Mode
- Cache
- Queue
- External Services
ดังนั้นอย่าสับสนระหว่าง
ไฟล์เริ่มต้นของ Request
public/index.php
กับ
ไฟล์ Environment Configuration
.env
เพราะทำหน้าที่คนละอย่างกัน
แล้ว artisan ล่ะ?
ถ้าเราเปิดเว็บ
public/index.php
คือ Entry Point สำคัญของ HTTP Request
แต่ถ้าเราใช้ Command Line เช่น
php artisan migrate
php artisan make:controller UserController
php artisan queue:work
เรากำลังเข้าสู่ Laravel ผ่านทาง Console แทน
ดังนั้น Laravel ไม่ได้มีแค่เส้นทางจาก Browser เพียงอย่างเดียว
มองภาพง่าย ๆ ได้ว่า
HTTP
public/index.php → Laravel Application
ส่วน
CLI
artisan → Laravel Application
ทั้งสองทางสุดท้ายเข้ามาใช้งาน Laravel Application เช่นเดียวกัน เพียงแต่ต้นทางของ Request/Command แตกต่างกัน
จุดที่ควรจำสำหรับ Laravel 13
ถ้าจำทั้งหมดไม่ไหว ให้จำ 5 จุดหลักนี้ก่อน
1. public/index.php
ประตูหลักของ HTTP Request
2. bootstrap/app.php
สร้างและ Configure Laravel Application รวมถึง Routing, Middleware และ Exception Configuration หลายส่วน
3. routes/
กำหนดว่า URL ไหนต้องไปทำงานที่ไหน
4. app/Http/Controllers/
รับงานจาก Route และควบคุม Logic ของ Request
5. resources/views/ หรือ Response
สร้างผลลัพธ์เพื่อส่งกลับไปยัง Client
ดังนั้นเวลาเราเขียน
Route → Controller → Model → View
จริง ๆ แล้วมีระบบของ Laravel ทำงานอยู่ก่อนหน้านั้นอีกหลายขั้น
เส้นทางเต็ม ๆ จึงใกล้เคียงกับ
Request → public/index.php → bootstrap/app.php → Application → Middleware → Router → Controller → Model/Service → View/Response → Client
เมื่อเข้าใจ Flow นี้แล้ว เรื่องอย่าง Middleware, Service Container, Dependency Injection, Route, Controller หรือแม้แต่การ Debug Laravel จะเข้าใจง่ายขึ้นมาก เพราะเรารู้แล้วว่า Request กำลังเดินทางผ่านส่วนไหนของ Framework
TPS Code Fusion
แชร์ความรู้และประสบการณ์ด้าน Software Development, Web Development และ Technology
🌐 www.tpscodefusion.com