Controllers เป็นตัวกลางในการรับข้อมูลที่ผู้ใช้งาน ป้อนเข้ามา และคอยประสานการทำงานระหว่าง Model View Libraries ก็อาจจะเหมือนกับ framework ตัวอื่นนะครับ แต่ใน Laravel ให้เราสามารถุเอาโค้ดที่ปกติต้องเขียนใน Controller เอาไปใช้งานใน Route ได้ อาจรายละเอียดต่อในนี้ได้เลยครับ routing document ไฟล์ Controller ถูกเก็บไว้ใน application/controllers ซึ่งมันได้รับการสืบทดมาจาก Base_Controller class.
ลองสร้าง controller แบบง่ายๆกันJ
class Admin_Controller extends Base_Controller
{
public function action_index()
{
// todo
}
}
Actions คือ prefix
ที่ใช้กำหนดว่า method
นี้สามารถถูกเข้าถึงโดย เรียกทาง url ได้
หมายเหตุ: Base_Controller
class มันสืบทอดมาจาก Controller หลักอีกที เป็นตัวกลางที่ให้เราสามารถเอา ฟังก์ชันที่เราต้องการให้ทุก Controller ได้ใช้ อย่างเช่น Auth ไปวางไว้ได้
เราต้องสร้าง Route
ให้ Controller
นะครับ ถ้าเราต้องการส่งค่าให้ผ่านท่าง URL
สมมุติเราอยากจะสร้าง controller
เพิ่มเติมให้ Bundle เราต้องให้ชื่อของ Bundle
ขึ้นต้นแล้วต่อด้วยชื่อเหมือนในตัวอย่าง Bundle
ชื่อ Admin
Controller ชื่อ home
class Admin_Home_Controller extends Base_Controller
{
public function action_index()
{ return "Hello Admin!";
}
}
ในการสร้าง route
ให้ bundle controller นั้น เราต้องใส่ ::
แบบในตัวอย่างนะครับ เป็นข้อกำหนดของ Laravel
Route::controller('admin::home');
Nest
Controller คือ
Controller ที่สร้างไว้ในโฟลเดอร์ที่อยู่ข้างในโฟลเดอร์ Controller อีกที
งงใช่ไหมครับ มาดุตัวอย่างกัน
controller Panel อยู่ใน โฟลเดอร์ Admin ที่ต้องเก็บไว้ในโฟลเดอร์ Admin เพราะเราต้องการแยกส่วนของ Client กับ Admin ออกจากกันด้วยการจับคลาสของแต่ละระบบ วางในคนละโฟลเดอร์ ช่วยให้ดูมีระเบียบขึ้น
controller Panel อยู่ใน โฟลเดอร์ Admin ที่ต้องเก็บไว้ในโฟลเดอร์ Admin เพราะเราต้องการแยกส่วนของ Client กับ Admin ออกจากกันด้วยการจับคลาสของแต่ละระบบ วางในคนละโฟลเดอร์ ช่วยให้ดูมีระเบียบขึ้น
class Admin_Panel_Controller extends Base_Controller
{
public function action_index()
{
}
}
การเข้าถึงเราก็ใช้ dot
ครับ
Route::controller('admin.panel');
เวลาเข้าถึงก็เหมือนในตัวอย่างข้างล่างครับ
http://localhost/admin/panel
อีกหนึ่งจุดเด่นของ laravel คือการทำ restful
แบบง่ายๆ ด้วยการใส่ http
method ที่เราอนุญาตให้ฟังก์ชันนั้นรับใส่เป็น prefix ไว้ข้างหน้า
class Home_Controller extends Base_Controller
{
public $restful = true;
public function get_index()
{
}
public function post_login()
{
}
public function post_index()
{
}
}
การทำแบบนี้จะมีประโยชน์ในการแบ่งแยกหน้าที่ของแต่ละ method
ในการ จะรับส่งข้อมูลที่มีความสำคัญมากหรือน้อย
ผมได้ทำการตัดหัวข้อบางอันออกไปนะครับ
เพราะมันมาจากหัวข้ออื่น
ผมก็งงมันเอามาปนกันทำไม่รู้ เรื่องต่อไปเป็น Laravel::Model & Libraries นะครับ
มารอดูว่ามันจะแตกต่างจาก Model ของ Framework ตัวอื่นกันยังไง
ไม่มีความคิดเห็น:
แสดงความคิดเห็น