Hướng dẫn về khung công tác PHP MVC
⚡ Tóm tắt thông minh
Khung PHP MVC thiết kế tách biệt dữ liệu ứng dụng và logic nghiệp vụ khỏi phần trình bày, sử dụng Models, Views và Controllers. CodeIgniter giúp mô hình này trở nên khả thi, cho phép các nhà phát triển PHP xây dựng các ứng dụng web an toàn và dễ bảo trì nhanh hơn.
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.
Chiếc xe có kính chắn gió (tầm nhìn) mà người lái (bộ điều khiển) sử dụng để quan sát giao thông phía trước, sau đó tăng tốc hoặc phanh (mô hình) tùy thuộc vào những gì anh ta nhìn thấy phía trước.
Tiếp theo, chúng ta hãy xem tại sao một framework được xây dựng dựa trên mô hình này lại đáng để sử dụng.
Tại sao nên sử dụng PHP MVC Framework?
Các framework PHP MVC đơn giản hóa việc làm 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 ta có thể sử dụng để xây dựng ứng dụng của mình.
- Tăng năng suất của nhà phát triển, vì các bước cơ bản của các hoạt động như kết nối với cơ sở dữ liệu và xử lý dữ liệu người dùng đã được triển khai một phần.
- Khuyến khích tuân thủ các tiêu chuẩn lập trình 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ẫu – 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 tài nguyên từ máy chủ của người dùng.
Ví dụ, khi người dùng yêu cầu URL …/index.php?products=listBộ điều khiển sẽ tải mô hình sản phẩm để truy xuất dữ liệu sản phẩm, sau đó xuất kết quả vào 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 liên quan đến việc trình bày dữ liệu cho người dùng. Thông thường, dữ liệu được hiển thị dưới dạng các 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ố framework PHP phổ biến và các tính năng mà mỗi framework cung cấp.
| Khung | Mô tả Chi tiết |
|---|---|
|
|
Đây là một trong những framework PHP MVC phổ biến nhất, hiện đang ở phiên bản chính thứ tư (CodeIgniter 4). Nó nhẹ và dễ học. Nó có một bộ thư viện phong phú giúp xây dựng các trang web và ứng dụng nhanh chóng. Người dùng có kiến thức hạn chế về lập trình hướng đối tượng cũng có thể sử dụng nó. Các ứng dụng được xây dựng bằng CodeBộ phận đánh lửa bao gồm;
|
|
Đây là một framework an toàn và gọn nhẹ theo mô hình Hierarchical Model View Controller (HMVC). Lưu ý: Kohana chính thức ngừng hoạt động vào năm 2017; phiên bản ổn định cuối cùng là 3.3.6 (tháng 7 năm 2016). Cộng đồng người dùng tiếp tục phát triển mã nguồn của Kohana. Các công ty từng sử dụng Kohana bao gồm: |
|
Nó được xây dựng dựa trên mô hình Ruby on Rails và vẫn đang được duy trì tích cực (phiên bản 5.x). Nó nổi tiếng với các khái niệm như mẫu thiết kế phần mềm, quy ước hơn 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ó lý tưởng cho việc phát triển.ping các ứng dụng kinh doanh. Năm 2020, Zend Framework đã chuyển sang dự án mã nguồn mở Laminas. Các ứng dụng được hỗ trợ bởi Zend/Laminas bao gồm:
Các công ty đã sử dụng framework Zend bao gồm:
|
So sánh PHP MVC và PHP thuần túy: Những điểm khác biệt chính
Trên thực tế, một framework thay đổi điều gì? PHP thuần túy cho phép bạn tự do hoàn toàn, nhưng mỗi dự án cuối cùng đều phải tự viết lại từ đầu phần định tuyến, xác thực và truy cập cơ sở dữ liệu. Một framework PHP MVC chuẩn hóa các tác vụ lặp đi lặp lại này, giúp mã của bạn nhất quán giữa các dự án và nhóm.
| Yếu tố | PHP thuần túy | Khung MVC PHP |
|---|---|---|
| Code cơ quan | Kết hợp HTML, SQL và logic trong cùng một tệp. | Được chia thành các mô hình, khung nhìn và bộ điều khiển. |
| Truy cập cơ sở dữ liệu | Các câu hỏi được viết tay trên mỗi trang. | Trình tạo truy vấn tích hợp hoặc ORM với ràng buộc tham số |
| Bảo mật | Nhà phát triển phải ghi nhớ mọi biện pháp bảo vệ. | Bao gồm tính năng lọc đầu vào, bảo vệ chống XSS và CSRF. |
| Bảo trì | Những thay đổi lan truyền một cách khó lường qua các tập tin. | Mỗi lớp có thể thay đổi độc lập. |
💡 Mẹo: Hãy xây dựng một dự án PHP đơn giản, nhỏ trước tiên, giống như cuộc thăm dò ý kiến bên dưới; sự khó khăn khi mã nguồn bị trộn lẫn sẽ cho thấy rõ giá trị của việc tách biệt mô hình MVC.
Chuyển đổi ứng dụng thăm dò ý kiến sang CodeIgnite
Với hướng dẫnChúng tôi đã tạo một ứng dụng thăm dò ý kiến bằng PHP. Ở đây, chúng tôi sẽ chuyển đổi mã đó sang... CodeIgnite
- Tải về phiên bản mới nhất của CodeBộ phận đánh lửa từ họ trang web.
- ExtracSao chép nội dung của tệp tin 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/
CodeTrang chào mừng của Igniter ở trên xác nhận rằng framework đã được cài đặt đúng cách. Bây giờ chúng ta sẽ chuyển ứng dụng thăm dò ý kiến của mình sang... CodeBộ phận đánh lửa. Hãy nhớ rằng ứng dụng của chúng ta được chia thành ba thành phần chính, đó là;
- Bộ điều khiển phía trước – đây là bộ phận phản hồi lại URL yêu cầu và trả về trang được yêu cầu. Đoạn mã này sẽ được đặt trong bộ điều khiển.
- Model – đây là đoạn mã phản hồi các yêu cầu dữ liệu và trả về dữ liệu được yêu cầu. Đoạn mã này sẽ được đưa vào model.
- 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
Cài đặt cấu hình cơ sở dữ liệu
Để cấu hình kết nối cơ sở dữ liệu:
- Truy cập vào thư mục ciopinionpoll
- Mở cơ sở dữ liệu.php Tệp tin nằm trong thư mục application/config.
- Xác định vị trí các dòng mã sau
- Đặt tên người dùng thành root
- Đặt mật khẩu thành mật khẩu root của máy chủ cục bộ (localhost) của bạn.
- Đặt tên cơ sở dữ liệu là opinion_poll. Lưu ý rằng chúng ta sẽ sử dụng cơ sở dữ liệu đã 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 kế thừa từ CI_Model. CI_Model là một phần của... CodeThư viện Igniter. Mô hình sẽ được đặt trong thư mục application/models. ý kiến_poll_model.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __construct()
{
parent::__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++)
{
$query = $this->db->select('COUNT(choice) as choices_count')
->where('choice', $i)
->get('js_libraries');
$table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
}
return $table_rows;
}
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
- “parent::__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à CodeLịch sử hoạt động của Igniter. Hãy kiểm tra điều này. liên kết này để biết thêm thông tin về hồ sơ hoạt động.
Tạo bộ điều khiển của chúng ta
Bây giờ chúng ta hãy tạo bộ điều khiển. Chúng ta sẽ sử dụng bộ điều khiển mặc định. CodeBộ điều khiển Igniter nằm trong thư mục application/controllers/welcome.php. Hãy thay thế mã nguồn của nó bằng đoạn mã 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 “public function __construct()” gọi phương thức khởi tạo của lớp CI_Controller và tải mô hình Opinion_poll_model của chúng ta.
- “public function index()…” là hàm ánh xạ tới index.php. Nó sử dụng CodeLớp `input` của Igniter kiểm tra xem đã có phiếu bầu nào được gửi chưa, thêm phiếu bầu đó vào cơ sở dữ liệu rồi hiển thị kết quả. Nếu mảng `post` của lớp `input` trống, nó sẽ tải trang bình chọn.
- “$this->input->post('…')” là CodeLớp nhập liệu Igniter 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ư đã đề cập trong ví dụ trước, chúng ta có hai trang HTML, một trang để bình chọn và một trang để hiển thị kết quả. Chúng ta sẽ sử dụng cùng mã HTML đó với một vài chỉnh sửa nhỏ để tạo ra các view. Hãy 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 là ciopinionpoll, hãy truy cập vào đường dẫn sau: http://localhost/ciopinionpoll/
Trang bỏ phiếu ở trên được lấy từ giao diện opinion_poll_form của chúng tôi. Nhấp vào OK mà không chọn tùy chọn nào, và bạn sẽ thấy thông báo cảnh báo sau.
Hãy bình chọn cho thư viện yêu thích của bạn, sau đó nhấn OK. Bạn sẽ thấy trang kết quả bên dưới.
Điều này xác nhận ba lớp hoạt động cùng nhau: bộ điều khiển nhận được phiếu bầu, mô hình lưu trữ và đếm phiếu, và giao diện người dùng hiển thị tổng số phiếu.









