Hướng dẫn về khung PHP MVC: Ví dụ về CodeIgniter
Khung công tác PHP MVC là gì?
PHP MVC là một mẫu thiết kế ứng dụng tách biệt dữ liệu ứng dụng và logic nghiệp vụ (mô hình) khỏi bản trình bày (dạng xem). MVC là viết tắt của Model, View & Controller.
Bộ điều khiển làm trung gian giữa các mô hình và khung nhìn.
Hãy nghĩ về mẫu thiết kế MVC như một chiếc ô tô và người lái xe.
Ô tô có kính chắn gió (chế độ xem) mà người lái xe (người điều khiển) sử dụng để giám sát giao thông phía trước, sau đó là tốc độ hoặc phanh (kiểu xe) tùy thuộc vào những gì anh ta nhìn thấy phía trước.
Tại sao nên sử dụng PHP MVC Framework?
- Các khuôn khổ PHP MVC đơn giản hóa công việc với các công nghệ phức tạp bằng cách;
- Ẩn tất cả các chi tiết triển khai phức tạp
- Cung cấp các phương pháp tiêu chuẩn mà chúng tôi có thể sử dụng để xây dựng các ứng dụng của mình.
- Tăng năng suất của nhà phát triển, điều này là do việc triển khai cơ bản các hoạt động như kết nối với cơ sở dữ liệu, vệ sinh đầu vào của người dùng, v.v. đã được triển khai một phần.
- Tuân thủ các tiêu chuẩn mã hóa chuyên nghiệp
Mẫu thiết kế PHP MVC
Bây giờ chúng ta hãy thảo luận ngắn gọn về từng thành phần của mẫu thiết kế MVC.
Mô hình – phần này liên quan đến logic nghiệp vụ và dữ liệu ứng dụng. Nó có thể được sử dụng để thực hiện xác nhận dữ liệu, xử lý dữ liệu và lưu trữ nó. Dữ liệu có thể đến từ;
- tập tin phẳng
- cơ sở dữ liệu
- Tài liệu XML
- Các nguồn dữ liệu hợp lệ khác.
Người điều khiển – đây là phần xử lý các yêu cầu của người dùng về tài nguyên từ máy chủ.
Ví dụ: khi người dùng yêu cầu URL …/index.php?products=list, bộ điều khiển sẽ tải mô hình sản phẩm để lấy dữ liệu sản phẩm sau đó xuất kết quả ở chế độ xem danh sách.
Tóm lại, bộ điều khiển liên kết các mô hình và khung nhìn với nhau tùy thuộc vào tài nguyên được yêu cầu.
Lượt xem – phần này đề cập đến việc trình bày dữ liệu cho người dùng. Điều này thường ở dạng trang HTML.
Các loại khung công tác PHP MVC
Việc lựa chọn khung PHP tốt nhất là một thách thức.
Bạn không cần phải viết framework của riêng mình để hưởng lợi từ những lợi thế của MVC.
Bạn chỉ nên cố gắng tạo thiết kế ứng dụng liên quan đến MVC của riêng mình để hiểu cách hoạt động của các khung MVC.
Khi bạn đã cảm thấy thoải mái với cách hoạt động của các khung MVC, bạn nên chuyển sang các khung hoàn thiện và đã được thử nghiệm.
Bảng dưới đây mô tả ngắn gọn một số khung công tác php phổ biến và các tính năng mà mỗi khung công tác cung cấp.
Khung | Mô tả |
---|---|
|
Đây là một trong những framework PHP MVC phổ biến nhất. Nó nhẹ và có thời gian học tập ngắn. Nó có một bộ thư viện phong phú giúp xây dựng trang web và ứng dụng một cách nhanh chóng. Người dùng có kiến thức hạn chế về lập trình OOP cũng có thể sử dụng nó. Các ứng dụng hỗ trợ CodeIgniter bao gồm; |
|
Đây là một bộ điều khiển chế độ xem mô hình phân cấp HMVC an toàn và nhẹ. Nó có một bộ thành phần phong phú để phát triển ứng dụng nhanh chóng. Các công ty sử dụng Kohana bao gồm; |
|
Nó được mô phỏng theo Ruby on Rails. Nó được biết đến với các khái niệm như mẫu thiết kế phần mềm, quy ước về cấu hình, ActiveRecord, v.v. CakePHP các ứng dụng được hỗ trợ bao gồm; |
|
Đó là một khuôn khổ mạnh mẽ;
Nó có tính năng API từ các nhà cung cấp như Amazon, Google, Flickr, Yahoo, v.v. Đó là lý tưởng để phát triển các ứng dụng kinh doanh. Các ứng dụng hỗ trợ Zend bao gồm;
Các công ty sử dụng khung Zend bao gồm;
|
Chuyển ứng dụng thăm dò ý kiến sang CodeIgniter
Với hướng dẫn, chúng tôi đã tạo một ứng dụng thăm dò ý kiến PHP. Ở đây, chúng tôi sẽ chuyển mã đó sang CodeIgniter
- Tải về phiên bản mới nhất của CodeIgniter từ trang web.
- Trích xuất nội dung của tệp nén vào thư mục phát triển trong thư mục máy chủ web của bạn. Chúng ta sẽ sử dụng ciopinionpoll làm tên thư mục trong bài học này.
- Duyệt đến URL http://localhost/ciopinionpoll/
Bây giờ chúng tôi sẽ chuyển ứng dụng thăm dò ý kiến của mình sang CodeIgniter. Hãy nhớ lại rằng ứng dụng của chúng tôi được chia thành ba thành phần chính là;
- Bộ điều khiển phía trước – đây là phần đáp ứng các yêu cầu URL và trả về trang được yêu cầu. Mã này sẽ đi vào bộ điều khiển
- Model - đây là mã phản hồi dữ liệu được yêu cầu và trả về dữ liệu được yêu cầu. Mã này sẽ đi vào mô hình
-
Lượt xem - đây là mã chịu trách nhiệm định dạng và hiển thị dữ liệu. Mã này sẽ đi vào chế độ xem
- Duyệt đến thư mục ciopinionpoll
- Mở cơ sở dữ liệu.php tập tin nằm trong thư mục ứng dụng/config.
- Xác định vị trí các dòng mã sau
Cài đặt cấu hình cơ sở dữ liệu
- Đặt tên người dùng thành root
- Đặt mật khẩu cho mật khẩu gốc localhost của bạn
- Tên cơ sở dữ liệu tới idea_poll. Lưu ý chúng ta sẽ sử dụng cơ sở dữ liệu được tạo trong bài học trước.
- Lưu các thay đổi và đóng tập tin.
Tạo mô hình của chúng tôi
Tiếp theo, chúng ta sẽ tạo mô hình mở rộng CI_Model. CI_Model là một phần của thư viện CodeIgniter. Mô hình sẽ được đặt trong ứng dụng/mô hình ý kiến_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); } } ?>
ĐÂY,
- “class Opinion_poll_model mở rộng CI_Model…” là mô hình mở rộng CI_Model của chúng tôi
- “…cha mẹ:: __construct();” gọi hàm tạo CI_Model
- “$this->load->database();” tải thư viện cơ sở dữ liệu để ứng dụng của chúng tôi có thể tương tác với cơ sở dữ liệu
- “$this->db->” là bản ghi hoạt động của CodeIgniter. Kiểm tra điều này Link để biết thêm thông tin về hồ sơ hoạt động.
Tạo Controller của chúng ta Bây giờ chúng ta hãy tạo controller. Chúng ta sẽ sử dụng controller CodeIgniter mặc định nằm trong application/controllers/welcome.php. Thay thế source code của nó bằng code sau.
<?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 */ ?>
ĐÂY,
- “if (! đã xác định ('BASEPATH')) thoát ('Không cho phép truy cập tập lệnh trực tiếp');" đảm bảo rằng người dùng không truy cập trực tiếp vào lớp điều khiển
- “class Welcome mở rộng CI_Controller…” bộ điều khiển của chúng tôi mở rộng lớp CI_Controller
- “hàm công khai __construct()” gọi phương thức xây dựng lớp của CI_Controller và tải mô hình Opinion_poll_model của chúng tôi
- “public function index()…” là hàm ánh xạ tới index.php. nó sử dụng lớp đầu vào của CodeIgniter để kiểm tra xem phiếu bầu đã được gửi chưa, thêm nó vào cơ sở dữ liệu rồi hiển thị kết quả. Nếu mảng bài đăng của lớp đầu vào trống, nó sẽ tải trang bỏ phiếu.
- “$this->input->post('…')” là lớp đầu vào CodeIgniter lấy nội dung của biến toàn cục $_POST.
- “$this->opinion_poll_model->add_vote($this->input->post('vote'))" gọi phương thức add_vote của mô hình để thêm phiếu bầu vào cơ sở dữ liệu.
Tạo quan điểm của chúng tôi
Nhớ lại ví dụ trước rằng chúng ta có hai trang HTML, một trang để bỏ phiếu và trang còn lại để hiển thị kết quả. Chúng ta sẽ sử dụng cùng một mã HTML với các sửa đổi tối thiểu để tạo chế độ xem của mình. Tạo các tệp sau trong thư mục 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>
Bây giờ hãy tạo trang kết quả 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>
Kiểm tra ứng dụng của chúng tôi
Giả sử thư mục gốc của ứng dụng của bạn là ciopinion, hãy duyệt đến http://localhost/ciopionpoll/
Nhấp vào nút OK, bạn sẽ thấy thông báo cảnh báo sau
Hãy bình chọn cho ứng cử viên bạn yêu thích sau đó nhấp vào OK Bạn sẽ thấy trang kết quả sau
Kết luận
CodeIgniter là một framework PHP MVC dễ học và dễ sử dụng, có thể giảm đáng kể thời gian phát triển ứng dụng.
CodeIgniter là một framework PHP MVC dễ học và dễ sử dụng, có thể giảm đáng kể thời gian phát triển ứng dụng.
Tổng kết
- Khung công tác là một tập hợp các thư viện cung cấp khả năng triển khai một phần các tác vụ chung.
- PHP có một số khung MVC mã nguồn mở đã được thử nghiệm và trưởng thành.
- Một cách tiếp cận phát triển tốt sẽ tách dữ liệu khỏi bản trình bày và khuyến khích sử dụng một điểm truy cập duy nhất vào một ứng dụng.
- Các ứng dụng PHP truyền thống tuân theo các phương pháp hay nhất về thiết kế ứng dụng có thể được chuyển sang khung MVC với những sửa đổi tối thiểu.