Controller คือหนึ่งในคอนเซปต์ ของ MVC ซึ่งมาจากตัวอักษรย่อ “C” นั้นเอง ซึ่งหน้าที่ของมันคือเป็นส่วนจัดการการ การทำงานของระบบ ซึ่งจะอยู่ระหว่างกลาง ของ Model และ View สำหรับบทความนี้เรามาเรียนรู้เกี่ยวกับdการสร้าง Controller, Middleware controller, resource controller ใน Laravel กันครับ
การสร้าง Controller
ให้เปิด Command line แล้วพิมพ์คำสั่ง Artisan CLI ตามด้านล่างนี้ครับ
1 |
php artisan make:controller BlogController |
Laravel จำทำการสร้างไฟล์ Controller มาให้เราเองซึ่งไฟล์จะอยู่ที่ app\Http\Controllers หลังจากนั้นเราเปิดไฟล์ BlogController.php แล้วเราจะเห็นตัวอย่างโค๊ดที่เขียนมาให้แล้ว
1 2 3 4 5 6 7 8 9 10 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class BlogController extends Controller { // } |
โดยไฟล์จะถูกสร้างไว้ที่ App/Http/Controllers แต่ถ้าเราไม่ต้องการให้มันสร้างผ่าน Artisan command เราสามารถ Create new file เองก็ได้เช่นกันครับ ไม่มีปัญหา
จากนั้นให้ใส่ ฟังก์ชั่น test() ลงไป จะได้เป็น
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class BlogController extends Controller { public function test() { echo 'Hello world!'; } } |
จากนั้นเราต้องไปกำหนดเส้นทางให้ชี้มาที่ Controller และ ฟังก์ชั่น test() ที่เราสร้าง โดยไปกำหนดที่ routes/web.php
1 2 |
<?php Route::get('blog/test', 'BlogController@test'); |
ลองทดสอบ ดูบน Chrome จะได้ผลลัพธ์ ตามรูปภาพด้านล่าง
จบแล้วการใช้งาน controller ง่ายไหมครับ สำหรับการใช้งาน Controller ใน Laravel
Middleware In Controller
เพิ่มเติมส่วนของการใช้งาน auth midleware ใน Controller ครับ โดยเราสามารถใช้ middleware ได้โดยนำโค๊ดไปใส่ที่ __construct() ลองดูตัวอย่างโค๊ดด้านล่างนี้ครับ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace App\Http\Controllers; class BlogController extends Controller { public function __construct() { $this->middleware('auth'); } public function test() { echo 'Hello world!'; } } |
จากตัวอย่างโค๊ดจะสังเกตุเห็นว่า ตอนที่ controller เราจะให้มีการตรวจสอบสิทธิ์ ทุกครั้งก่อนเสมอ
Resource Controllers
เป็นการเขียน Controller ที่มี CRUD (Create, Read, Update, Delete) ครบครัน ด้วยการเขียน routes/web.php เพียงบรรทัดเดียว เท่านั้น อยากให้นึกภาพให้เห็น การที่ Controller เรามีหลายๆ ฟังก์ชั่น เช่น index(), Create(), Show() เราจำเป็นต้องเขียน Routes หลายบรรทัด เช่น
1 2 3 |
Route::get('index', 'BlogController@index'); Route::get('create', 'BlogController@Create'); Route::get('show', 'BlogController@Show'); |
แล้วถ้าใน controller มีมากกว่านี้ เราจะทำอย่างไร ดังนั้น Resource Controller จะมาช่วยทำ โดยเราเขียน โค๊ดใน Route เพียงการโค๊ด
1 2 3 |
Route::resources([ 'blog' => 'BlogController', ]); |
สิ่งที่เราได้จากโค๊ดนี้ เปรียบเสมือนเราเขียน Route แบบนี้ครับ
1 |
php artisan make:controller BlogController --resource |
Artisan command ก็จะ generate ไฟล์พร้อมโค๊ด ที่มีฟังก์ชั่น index(), create(), show($id), edit($id), store($reqeuset), update($reqeust, $id), destroy($id) มาให้เราโดยไม่ต้องพิมพ์ใดๆเลย
ส่วนความหมายแต่ละฟังก์ชั่นมีดังนี้
Verb | URI | Action | Route Name | Description |
---|---|---|---|---|
GET | /blog |
index | blog.index | หน้าแรก |
GET | /blog/create |
create | blog.create | หน้า Create |
POST | /blog |
store | blog.store | ฟังก์ชั่นการ Insert ข้อมูล |
GET | /blog/{id} |
show | blog.show | หน้าแสดงข้อมูลตาม ID |
GET | /blog/{id}/edit |
edit | blog.edit | หน้าแก้ไขข้อมูล |
PUT/PATCH | /blog/{id} |
update | blog.update | ฟังก์ชั่นการ Update ข้อมูล |
DELETE | /blog/{id} |
destroy | blog.destroy | ฟังก์ชั่นการ Delete ข้อมูล |
สำหรับบทความนี้ก็จบเพียงเท่านี้หากมีปัญหาหรือคำถามใดๆ สามารถสอบถามได้ทาง comment ด้านล่างนี้เลยครับ