บทช่วยสอนกรอบงาน PHP MVC: ตัวอย่าง CodeIgniter
กรอบงาน PHP MVC คืออะไร?
PHP MVC เป็นรูปแบบการออกแบบแอปพลิเคชันที่แยกข้อมูลแอปพลิเคชันและตรรกะทางธุรกิจ (โมเดล) ออกจากการนำเสนอ (มุมมอง) MVC ย่อมาจาก Model, View & Controller
ตัวควบคุมจะทำหน้าที่เป็นสื่อกลางระหว่างโมเดลและมุมมอง
คิดว่ารูปแบบการออกแบบ MVC เป็นรถยนต์และเป็นคนขับ
รถมีกระจกบังลม (มุมมอง) ซึ่งคนขับ (ตัวควบคุม) ใช้ในการตรวจสอบการจราจรข้างหน้าแล้วเร่งความเร็วหรือเบรก (รุ่น) ขึ้นอยู่กับสิ่งที่เขามองเห็นข้างหน้า
เหตุใดจึงต้องใช้ PHP MVC Framework?
- PHP MVC Frameworks ทำให้การทำงานกับเทคโนโลยีที่ซับซ้อนง่ายขึ้นโดย:
- ซ่อนรายละเอียดการใช้งานที่ซับซ้อนทั้งหมด
- จัดเตรียมวิธีการมาตรฐานที่เราสามารถใช้เพื่อสร้างแอปพลิเคชันของเรา
- ผลผลิตของนักพัฒนาที่เพิ่มขึ้น เนื่องมาจากการดำเนินกิจกรรมพื้นฐาน เช่น การเชื่อมต่อกับฐานข้อมูล การฆ่าเชื้ออินพุตของผู้ใช้ ฯลฯ ได้ถูกนำมาใช้แล้วบางส่วน
- การปฏิบัติตามมาตรฐานการเข้ารหัสระดับมืออาชีพ
รูปแบบการออกแบบ PHP MVC
ตอนนี้เรามาพูดคุยกันสั้น ๆ เกี่ยวกับแต่ละองค์ประกอบของรูปแบบการออกแบบ MVC
รุ่น – ส่วนนี้เกี่ยวข้องกับตรรกะทางธุรกิจและข้อมูลแอปพลิเคชัน สามารถใช้ในการตรวจสอบข้อมูล ประมวลผลข้อมูล และจัดเก็บข้อมูลได้ ข้อมูลสามารถมาจาก;
- ไฟล์แบน
- ฐานข้อมูล
- เอกสาร XML
- แหล่งข้อมูลที่ถูกต้องอื่นๆ
ตัวควบคุม – ส่วนนี้เกี่ยวข้องกับคำขอทรัพยากรของผู้ใช้จากเซิร์ฟเวอร์
ดังตัวอย่างเมื่อผู้ใช้ร้องขอ URL …/index.php?products=listตัวควบคุมจะโหลดโมเดลผลิตภัณฑ์เพื่อดึงข้อมูลผลิตภัณฑ์ จากนั้นจึงแสดงผลลัพธ์ในมุมมองรายการ
โดยสรุป คอนโทรลเลอร์จะเชื่อมโยงโมเดลและมุมมองเข้าด้วยกัน ขึ้นอยู่กับทรัพยากรที่ร้องขอ
เข้าชม – ส่วนนี้จะเกี่ยวกับการนำเสนอข้อมูลให้กับผู้ใช้ โดยปกติจะอยู่ในรูปแบบของหน้า HTML
ประเภทของเฟรมเวิร์ก PHP MVC
การเลือกเฟรมเวิร์ก PHP ที่ดีที่สุดถือเป็นความท้าทาย
คุณไม่จำเป็นต้องเขียนเฟรมเวิร์กของคุณเองเพื่อรับประโยชน์จากข้อดีของ MVC
คุณควรพยายามสร้างการออกแบบแอปพลิเคชันที่เกี่ยวข้องกับ MVC ของคุณเองเพื่อทำความเข้าใจวิธีการทำงานของกรอบงาน MVC
เมื่อคุณพอใจกับวิธีการทำงานของกรอบงาน MVC แล้ว คุณควรก้าวไปสู่กรอบงานที่สมบูรณ์และผ่านการทดสอบแล้ว
ตารางด้านล่างนี้อธิบายโดยย่อเกี่ยวกับเฟรมเวิร์ก PHP ยอดนิยมบางส่วนและฟีเจอร์ที่แต่ละเฟรมเวิร์กนำเสนอ
กรอบ | Descriptไอออน |
---|---|
|
มันเป็นหนึ่งในเฟรมเวิร์ก PHP MVC ที่ได้รับความนิยมมากที่สุด มันมีน้ำหนักเบาและมีช่วงการเรียนรู้ที่สั้น มีชุดไลบรารีมากมายที่ช่วยสร้างเว็บไซต์และแอปพลิเคชันอย่างรวดเร็ว ผู้ใช้ที่มีความรู้จำกัดเกี่ยวกับการเขียนโปรแกรม OOP ก็สามารถใช้งานได้เช่นกัน แอพพลิเคชั่นที่ขับเคลื่อนด้วย CodeIgniter ได้แก่; |
![]()
|
เป็นกรอบงาน HMVC ที่ปลอดภัยและมีน้ำหนักเบาสำหรับ Hierarchical Model View Controller ซึ่งมีชุดส่วนประกอบที่หลากหลายสำหรับการพัฒนาแอปพลิเคชันอย่างรวดเร็ว บริษัทที่ใช้ Kohana ได้แก่ |
![]()
|
มันถูกสร้างแบบจำลองมาจาก Ruby on Rails เป็นที่รู้จักในแนวคิดต่างๆ เช่น รูปแบบการออกแบบซอฟต์แวร์ อนุสัญญาเหนือการกำหนดค่า ActiveRecord เป็นต้น CakePHP แอพพลิเคชั่นที่ขับเคลื่อนได้แก่; |
![]()
|
มันเป็นกรอบการทำงานที่ทรงพลังนั่นคือ
มันมี API จากผู้ขายเช่น Amazon, Google Flickr, Yahoo เป็นต้น เหมาะอย่างยิ่งสำหรับการพัฒนาแอพพลิเคชั่นทางธุรกิจ แอพพลิเคชั่นที่ขับเคลื่อนโดย Zend ได้แก่;
บริษัทต่างๆ ที่ใช้เฟรมเวิร์ก Zend ได้แก่;
|
กำลังย้ายแอปพลิเคชันการสำรวจความคิดเห็นไปยัง CodeIgniter
ในการนี้ เกี่ยวกับการสอนเราได้สร้างแอปพลิเคชันการสำรวจความคิดเห็น PHP ที่นี่ เราจะย้ายโค้ดนั้นไปที่ CodeIgniter
- ดาวน์โหลด CodeIgniter เวอร์ชันล่าสุดจากพวกเขา เว็บไซต์.
- แยกเนื้อหาของไฟล์ซิปไปยังไดเร็กทอรีการพัฒนาของคุณในไดเร็กทอรีเว็บเซิร์ฟเวอร์ของคุณ เราจะใช้ ciopinionpoll เป็นชื่อโฟลเดอร์ในบทเรียนนี้
- เรียกดู URL http://localhost/ciopinionpoll/
ตอนนี้เรากำลังจะย้ายแอปพลิเคชั่นการสำรวจความคิดเห็นของเราไปที่ CodeIgniter โปรดจำไว้ว่าแอปพลิเคชันของเราแบ่งออกเป็นสามองค์ประกอบหลัก ได้แก่
- Front controller - นี่คือส่วนที่ตอบสนองต่อคำขอ URL และส่งคืนหน้าที่ร้องขอ รหัสนี้จะเข้าสู่คอนโทรลเลอร์
- รุ่น – นี่คือรหัสที่ตอบสนองต่อข้อมูลที่ร้องขอและส่งคืนข้อมูลที่ร้องขอ รหัสนี้จะเข้าไปในโมเดล
-
มุมมอง – นี่คือโค้ดที่รับผิดชอบในการจัดรูปแบบและการแสดงข้อมูล รหัสนี้จะเข้าสู่มุมมอง
- เรียกดูโฟลเดอร์ ciopinionpoll
- เปิด ฐานข้อมูล.php ไฟล์ที่อยู่ในไดเรกทอรี application/config
- ค้นหาบรรทัดโค้ดต่อไปนี้
การตั้งค่าการกำหนดค่าฐานข้อมูล
- ตั้งชื่อผู้ใช้เป็นรูท
- ตั้งรหัสผ่านเป็นรหัสผ่านรูท localhost ของคุณ
- ชื่อฐานข้อมูลถึง comment_poll โปรดทราบว่าเราจะใช้ฐานข้อมูลที่สร้างขึ้นในบทเรียนก่อนหน้า
- บันทึกการเปลี่ยนแปลงและปิดไฟล์
การสร้างแบบจำลองของเรา
ต่อไปเราจะสร้างโมเดลของเราที่จะขยาย CI_Model CI_Model เป็นส่วนหนึ่งของไลบรารี CodeIgniter โมเดลจะอยู่ในแอปพลิเคชัน/โมเดล comment_poll_model.php
<?php class Opinion_poll_model extends CI_Model { public function __construct() { $this->load->database(); } public function total_votes() { $query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries'); return $query->row()->choices_count; } public function get_results() { $libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow"); $table_rows = ''; for ($i = 1; $i < 5; $i++) { $sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;"; $result = $model-> select($sql_stmt); $table_rows .= "<tr><td>" . $ libraries [$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>"; } public function add_vote($choice) { $ts = date("Y-m-d H:i:s"); $data = array('choice' => $choice, 'ts' => $ts); $this->db->insert('js_libraries', $data); } } ?>
ที่นี่
- “class Opinion_poll_model ขยาย CI_Model…” เป็นโมเดลของเราที่ขยาย CI_Model
- “…ผู้ปกครอง:: __สร้าง();” เรียกตัวสร้าง CI_Model
- “$นี่->โหลด->ฐานข้อมูล();” โหลดไลบรารีฐานข้อมูลเพื่อให้แอปพลิเคชันของเราสามารถโต้ตอบกับฐานข้อมูลได้
- “$this->db->” คือบันทึกที่ใช้งานอยู่ของ CodeIgniter ตรวจสอบสิ่งนี้ ลิงค์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับบันทึกที่ใช้งานอยู่
การสร้างคอนโทรลเลอร์ของเรา มาสร้างคอนโทรลเลอร์กันเลย เราจะใช้คอนโทรลเลอร์ CodeIgniter เริ่มต้นซึ่งอยู่ในไฟล์ application/controllers/welcome.php แทนที่โค้ดต้นฉบับด้วยโค้ดต่อไปนี้
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Welcome extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('opinion_poll_model'); } public function index() { if ($this->input->post('submitbutton') && !$this->input->post('vote')) { echo "<script>alert('You did not vote!');</script>"; } if ($this->input->post('vote')) { $this->opinion_poll_model->add_vote($this->input->post('vote')); $data['total_votes'] = $this->opinion_poll_model->total_votes(); $data['rows'] = $this->opinion_poll_model->get_results(); $this->load->view('results', $data); } else { $this->load->view('opinion_poll_form'); } } } /* End of file welcome.php */ /* Location: ./application/controllers/welcome.php */ ?>
ที่นี่
- “ถ้า (!กำหนด('BASEPATH')) exit('ไม่อนุญาตให้เข้าถึงสคริปต์โดยตรง');” ตรวจสอบให้แน่ใจว่าผู้ใช้ไม่ได้เข้าถึงคลาสคอนโทรลเลอร์โดยตรง
- “ยินดีต้อนรับคลาสขยาย CI_Controller…” คอนโทรลเลอร์ของเราขยายคลาส CI_Controller
- “ฟังก์ชันสาธารณะ __construct()” เรียกใช้เมธอดตัวสร้างคลาสของ CI_Controller และโหลดโมเดล Opinion_poll_model ของเรา
- “public function index()…” เป็นฟังก์ชันที่แมปกับ index.php ใช้คลาสอินพุตของ CodeIgniter เพื่อตรวจสอบว่ามีการลงคะแนนเสียงหรือไม่ เพิ่มลงในฐานข้อมูลแล้วแสดงผลลัพธ์ หากอาร์เรย์โพสต์ของคลาสอินพุตว่างเปล่า ระบบจะโหลดหน้าการลงคะแนน
- “$this->input->post('…')” คือคลาสอินพุต CodeIgniter ที่ดึงเนื้อหาของตัวแปรโกลบอล $_POST
- “$this->opinion_poll_model->add_vote($this->input->post('vote'))” เรียกเมธอด add_vote ของโมเดลเพื่อเพิ่มการโหวตลงในฐานข้อมูล
การสร้างมุมมองของเรา
ย้อนกลับไปจากตัวอย่างก่อนหน้านี้ว่าเรามีหน้า HTML สองหน้า หน้าหนึ่งใช้สำหรับการโหวต และอีกหน้าใช้สำหรับผลลัพธ์ เราจะใช้โค้ด HTML เดียวกันโดยปรับเปลี่ยนเล็กน้อยเพื่อสร้างมุมมองของเรา สร้างไฟล์ต่อไปนี้ในไดเร็กทอรี application/views
opinion_poll_form.php <html> <head> <title> JavaScript Libraries - Opinion Poll </title> </head> <body> <h2>JavaScript Libraries - Opinion Poll</h2> <p><b>What is your favorite JavaScript Library?</b></p> <form method="POST" action="index.php"> <p> <input type="radio" name="vote" value="1" /> JQuery <br /> <input type="radio" name="vote" value="2" /> MooTools <br /> <input type="radio" name="vote" value="3" /> YUI Library <br /> <input type="radio" name="vote" value="4" /> Glow </p> <p> <input type="submit" name="submitbutton" value="OK" /> </p> </form> </body> </html>
ตอนนี้เรามาสร้างหน้าผลลัพธ์ results.php กันดีกว่า
<html> <head> <title>JavaScript Libraries - Opinion Poll Results</title> </head> <body> <h2>JavaScript Libraries - Opinion Poll Results</h2> <p><b>What is your favorite JavaScript Library?</b></p> <p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p> <p><table><tr><td> <?php print($rows); ?> </tr></td></table></p> <p><a href="#">Return to voting page</a></p> </body> </html>
การทดสอบแอปพลิเคชันของเรา
สมมติว่าไดเรกทอรีรากของแอปพลิเคชันของคุณคือ ciopinion ให้เรียกดู http://localhost/ciopionpoll/
คลิกปุ่มตกลง คุณจะเห็นข้อความแจ้งเตือนดังต่อไปนี้
โหวตให้ผู้สมัครที่คุณชื่นชอบ จากนั้นคลิกตกลง คุณจะเห็นหน้าผลลัพธ์ดังต่อไปนี้
สรุป
CodeIgniter เป็นเฟรมเวิร์ก PHP MVC ที่เรียนรู้และใช้งานได้ง่าย ซึ่งสามารถลดเวลาที่ใช้ในการพัฒนาแอปพลิเคชันได้อย่างมาก
CodeIgniter เป็นเฟรมเวิร์ก PHP MVC ที่เรียนรู้และใช้งานได้ง่าย ซึ่งสามารถลดเวลาที่ใช้ในการพัฒนาแอปพลิเคชันได้อย่างมาก
สรุป
- กรอบงานคือชุดของไลบรารีที่จัดเตรียมการใช้งานทั่วไปบางส่วน
- PHP มีเฟรมเวิร์ก MVC แบบโอเพ่นซอร์สที่ครบกำหนดและทดสอบแล้วจำนวนหนึ่ง
- แนวทางการพัฒนาที่ดีจะแยกข้อมูลออกจากการนำเสนอ และสนับสนุนการใช้จุดเข้าใช้งานจุดเดียวในแอปพลิเคชัน
- แอปพลิเคชัน PHP แบบดั้งเดิมที่ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดในการออกแบบแอปพลิเคชันสามารถย้ายไปยังเฟรมเวิร์ก MVC โดยมีการแก้ไขเพียงเล็กน้อย