Loading...

รายละเอียดข้อมูลคลังความรู้

ข้อมูลคลังความรู้

รายละเอียดเนื้อหา

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_CONNECTION
DB_HOST
DB_PORT
DB_DATABASE
DB_USERNAME
DB_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
  • Mail
  • 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

ข้อมูลทั่วไป

หมวดหมู่:
ความรู้ทางด้าน Programming
ไฟล์แนบ:
วันที่/เวลา เพิ่ม:
07/10/2569 เวลา 16:55:25 admin
เว็บไซต์นี้มีการจัดเก็บคุกกี้เพื่อเพิ่มประสิทธิภาพในการใช้งานของท่าน   และการมอบบริการที่ดีที่สุดจากเรา   กรุณากดยอมรับ   คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการใช้งานคุกกี้ของเราได้ที่ นโยบายการใช้คุกกี้