บทช่วยสอนกรอบงาน 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ไอออน

CodeIgniter


CodeIgniter


https://codeigniter.com/

มันเป็นหนึ่งในเฟรมเวิร์ก PHP MVC ที่ได้รับความนิยมมากที่สุด มันมีน้ำหนักเบาและมีช่วงการเรียนรู้ที่สั้น มีชุดไลบรารีมากมายที่ช่วยสร้างเว็บไซต์และแอปพลิเคชันอย่างรวดเร็ว ผู้ใช้ที่มีความรู้จำกัดเกี่ยวกับการเขียนโปรแกรม OOP ก็สามารถใช้งานได้เช่นกัน แอพพลิเคชั่นที่ขับเคลื่อนด้วย CodeIgniter ได้แก่;


โคฮานะ


โคฮานะ


http://kohanaframework.org

เป็นกรอบงาน HMVC ที่ปลอดภัยและมีน้ำหนักเบาสำหรับ Hierarchical Model View Controller ซึ่งมีชุดส่วนประกอบที่หลากหลายสำหรับการพัฒนาแอปพลิเคชันอย่างรวดเร็ว บริษัทที่ใช้ Kohana ได้แก่


CakePHP


CakePHP


www.cakephp.org

มันถูกสร้างแบบจำลองมาจาก Ruby on Rails เป็นที่รู้จักในแนวคิดต่างๆ เช่น รูปแบบการออกแบบซอฟต์แวร์ อนุสัญญาเหนือการกำหนดค่า ActiveRecord เป็นต้น CakePHP แอพพลิเคชั่นที่ขับเคลื่อนได้แก่;


Zend

www.framework.zend.com


Zend

มันเป็นกรอบการทำงานที่ทรงพลังนั่นคือ

  • ปลอดภัย เชื่อถือได้ รวดเร็ว และปรับขนาดได้
  • รองรับ Web 2.0 และการสร้างบริการเว็บ

มันมี API จากผู้ขายเช่น Amazon, Google Flickr, Yahoo เป็นต้น เหมาะอย่างยิ่งสำหรับการพัฒนาแอพพลิเคชั่นทางธุรกิจ แอพพลิเคชั่นที่ขับเคลื่อนโดย Zend ได้แก่;

  • พิมคอร์ ซีเอ็มเอส,
  • ดอทเคอร์เนล.

บริษัทต่างๆ ที่ใช้เฟรมเวิร์ก Zend ได้แก่;

  • บีบีซี
  • Cisco
  • Webex
  • Offers.com

กำลังย้ายแอปพลิเคชันการสำรวจความคิดเห็นไปยัง CodeIgniter

ในการนี​​้ เกี่ยวกับการสอนเราได้สร้างแอปพลิเคชันการสำรวจความคิดเห็น PHP ที่นี่ เราจะย้ายโค้ดนั้นไปที่ CodeIgniter

  • ดาวน์โหลด CodeIgniter เวอร์ชันล่าสุดจากพวกเขา เว็บไซต์.
  • แยกเนื้อหาของไฟล์ซิปไปยังไดเร็กทอรีการพัฒนาของคุณในไดเร็กทอรีเว็บเซิร์ฟเวอร์ของคุณ เราจะใช้ ciopinionpoll เป็นชื่อโฟลเดอร์ในบทเรียนนี้
  • เรียกดู URL http://localhost/ciopinionpoll/

กำลังย้ายแอปพลิเคชันการสำรวจความคิดเห็นไปยัง CodeIgniter

ตอนนี้เรากำลังจะย้ายแอปพลิเคชั่นการสำรวจความคิดเห็นของเราไปที่ 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/

การทดสอบกรอบงาน PHP MVC

คลิกปุ่มตกลง คุณจะเห็นข้อความแจ้งเตือนดังต่อไปนี้

การทดสอบกรอบงาน PHP MVC

โหวตให้ผู้สมัครที่คุณชื่นชอบ จากนั้นคลิกตกลง คุณจะเห็นหน้าผลลัพธ์ดังต่อไปนี้

การทดสอบกรอบงาน PHP MVC

สรุป

CodeIgniter เป็นเฟรมเวิร์ก PHP MVC ที่เรียนรู้และใช้งานได้ง่าย ซึ่งสามารถลดเวลาที่ใช้ในการพัฒนาแอปพลิเคชันได้อย่างมาก
CodeIgniter เป็นเฟรมเวิร์ก PHP MVC ที่เรียนรู้และใช้งานได้ง่าย ซึ่งสามารถลดเวลาที่ใช้ในการพัฒนาแอปพลิเคชันได้อย่างมาก

สรุป

  • กรอบงานคือชุดของไลบรารีที่จัดเตรียมการใช้งานทั่วไปบางส่วน
  • PHP มีเฟรมเวิร์ก MVC แบบโอเพ่นซอร์สที่ครบกำหนดและทดสอบแล้วจำนวนหนึ่ง
  • แนวทางการพัฒนาที่ดีจะแยกข้อมูลออกจากการนำเสนอ และสนับสนุนการใช้จุดเข้าใช้งานจุดเดียวในแอปพลิเคชัน
  • แอปพลิเคชัน PHP แบบดั้งเดิมที่ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดในการออกแบบแอปพลิเคชันสามารถย้ายไปยังเฟรมเวิร์ก MVC โดยมีการแก้ไขเพียงเล็กน้อย