CodeVí dụ về khung Igniter MVC (Model View Controller)
⚡ Tóm tắt thông minh
CodeKhung Igniter MVC chia ứng dụng thành Model, View và Controller. Model xử lý dữ liệu và logic nghiệp vụ, Controller điều phối các yêu cầu, và View hiển thị kết quả, mang lại sự liên kết lỏng lẻo, tính linh hoạt và năng suất cao hơn cho nhà phát triển.
MVC là gì?
MVC là viết tắt của Model-View-Controller (Mô hình-Xem-Bộ điều khiển). Đây là một mô hình kiến trúc chia ứng dụng thành ba thành phần chính:
- Mô hình này xử lý logic nghiệp vụ và tương tác với cơ sở dữ liệu.
- Bộ điều khiển điều phối các hoạt động giữa mô hình và giao diện người dùng.
- View chịu trách nhiệm hiển thị dữ liệu.
Dưới đây là một số ưu điểm của mô hình kiến trúc MVC:
- Liên kết lỏng lẻo – các thành phần tồn tại và hoạt động độc lập với nhau.
- Tính linh hoạt – bạn có thể dễ dàng thay đổi từng thành phần riêng lẻ.
- Tăng năng suất – nhiều người có thể cùng làm việc trên dự án. Lập trình viên giao diện người dùng (front-end) có thể tập trung vào giao diện và trình bày, trong khi lập trình viên phía máy chủ (back-end) tập trung vào mô hình, và vì hệ thống có tính liên kết lỏng lẻo, nên cuối cùng tất cả đều hoạt động cùng nhau.
Mẫu
Mô hình chịu trách nhiệm tương tác với các nguồn dữ liệu. Thông thường, đó là cơ sở dữ liệu, nhưng cũng có thể là một dịch vụ cung cấp dữ liệu được yêu cầu. Một thực tiễn phổ biến khác là giữ logic nghiệp vụ trong mô hình thay vì trong bộ điều khiển. Thực tiễn này thường được gọi là “mô hình dày, bộ điều khiển mỏng”.
Mô hình thường ghi dữ liệu vào cơ sở dữ liệu và cung cấp cơ chế để chỉnh sửa, cập nhật và xóa dữ liệu. Trong một ứng dụng web hiện đại, các mô hình sử dụng các mẫu thiết kế truy cập dữ liệu như Active Record để giúp việc tương tác với cơ sở dữ liệu dễ dàng hơn.
Ví dụ, CodeIgniter sử dụng thư viện Active Record tích hợp sẵn để hỗ trợ các mô hình, trong khi các framework khác như Laravel sử dụng Eloquent Object Relational Mapper (ORM) để truy cập dữ liệu.
Người điều khiển
Bộ điều khiển lắng nghe các yêu cầu tài nguyên đến từ người dùng. Nó hoạt động như một trung gian giữa mô hình và giao diện người dùng, và đôi khi cũng thực hiện một số quy tắc nghiệp vụ. Giả sử bộ điều khiển nhận được yêu cầu đăng ký người dùng trong cơ sở dữ liệu.
Bộ điều khiển có thể thực hiện xác thực dữ liệu đã được gửi để đảm bảo tất cả các tham số cần thiết đều có mặt. Nếu thiếu thông tin nào đó, người dùng sẽ được chuyển hướng đến trang đăng ký với thông báo lỗi thích hợp. Bộ điều khiển cũng có thể yêu cầu mô hình thực hiện thêm xác thực, chẳng hạn như kiểm tra xem địa chỉ email đã gửi có tồn tại hay không. Nếu tất cả các quy tắc xác thực đều được chấp nhận, bộ điều khiển sẽ gửi dữ liệu đến mô hình để xử lý và chờ phản hồi.
Sau khi mô hình đã xử lý thông tin và trả về phản hồi tích cực, bộ điều khiển sẽ tải chế độ xem thích hợp và chuyển dữ liệu được trả về từ mô hình dưới dạng tham số.
Xem
Chế độ xem xử lý dữ liệu được trình bày cho người dùng cuối. Trong các ứng dụng web, các khung nhìn thường chứa HTML, CSS và tùy chọn JavaScriptCác view chứa mã lập trình tối thiểu, thường chỉ đủ để lặp qua các tập hợp dữ liệu nhận được từ model, hoặc một hàm hỗ trợ để dọn dẹp dữ liệu hoặc tạo liên kết chỉnh sửa. Hầu hết các ứng dụng web hiện đại sử dụng các công cụ tạo mẫu với cú pháp giống như mã giả mà các nhà thiết kế có thể hiểu được. Khi làm việc với CodeTrong Igniter, việc sử dụng các thẻ PHP ngắn và cấu trúc điều khiển là thông lệ phổ biến. Để hiển thị một cái gì đó trong CodeVới Igniter, bạn có thể sử dụng đoạn mã sau:
<?=$title?>
Ngược lại với:
<?php
echo $title;
?>
Cấu trúc điều khiển thường được viết như sau:
<?php foreach ($customers as $customer): ?> <li> <p><?=$customer->first_name?></p> </li> <?php endforeach; ?>
Như bạn có thể thấy từ ví dụ trên, giao diện sử dụng sự kết hợp của PHP và HTML thay vì bao bọc mọi thứ bằng mã PHP thuần túy.
Cách thức hoạt động của các Framework MVC
Hình ảnh sau đây minh họa cách thức hoạt động của framework MVC.
Bộ điều khiển nhận yêu cầu từ người dùng, tương tác với mô hình cơ sở dữ liệu nếu cần, sau đó trả về kết quả cho trình duyệt dưới dạng mã HTML, mà trình duyệt sẽ diễn giải thành định dạng dễ đọc đối với con người và hiển thị cho người dùng.
CodeBộ điều khiển đánh lửa
Bây giờ chúng ta hãy cùng phân tích những gì đã xảy ra khi chúng ta tải... URL Mở trình duyệt web. Mở tệp điều khiển Welcome.php nằm trong thư mục application/controllers. Bạn sẽ thấy đoạn mã sau:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Welcome extends CI_Controller { public function index() { $this->load->view('welcome_message'); } }
Đây:
- defined('BASEPATH') OR exit('No direct script access allowed'); ngăn chặn truy cập trực tiếp vào bộ điều khiển nếu yêu cầu không đến từ index.php. Điều này nhằm mục đích bảo mật.
- class Welcome extends CI_Controller {…} định nghĩa lớp điều khiển Welcome và kế thừa lớp cha CI_Controller.
- public function index(){…} định nghĩa phương thức index phản hồi lại URL
http://localhost:3000. - $this->load->view('welcome_message'); tải view welcome_message nằm trong thư mục application/views.
Chúng ta sẽ cập nhật phương pháp lập chỉ mục như sau:
public function index()
{
$this->load->model('customers_model');
$data['customer'] = $this->customers_model->get_customer(3);
$this->load->view('welcome_message',$data);
}
Đây:
- $this->load->model('customers_model'); tải mô hình khách hàng.
- $data['customer'] = $this->customers_model->get_customer(3); gọi phương thức get_customer của customers_model và truyền vào tham số 3. Trong ví dụ này, chúng ta đã mã hóa cứng giá trị, nhưng trong các ứng dụng thực tế, đây sẽ là một tham số từ URI.
- $this->load->view('welcome_message',$data); tải view welcome_message và truyền vào biến $data.
CodeMô hình bộ đánh lửa
Bây giờ chúng ta hãy tạo mô hình được tham chiếu trong đoạn mã ở trên. Để đơn giản, mô hình của chúng ta sẽ không tương tác với... cơ sở dữ liệu Nhưng nó sẽ trả về một bản ghi khách hàng tĩnh. Chúng ta sẽ làm việc với cơ sở dữ liệu trong các bài hướng dẫn tiếp theo. Tạo một tệp Customers_model.php trong thư mục application/models và thêm đoạn mã sau:
<?php class Customers_model extends CI_Model { public function get_customer($id) { $data['id'] = 3; $data['first_name'] = 'John'; $data['last_name'] = 'Doe'; $data['address'] = 'Kingstone'; return $data; } }
Đây:
- lớp Khách hàng_model mở rộng CI_Model {…} xác định mô hình Khách hàng_model mở rộng CI_Model.
- public function get_customer($id) {…} định nghĩa phương thức get_customer dựa trên ID khách hàng.
- $data[…] định nghĩa các giá trị tĩnh của khách hàng giả định của chúng ta. Đây phải là một hàng được trả về từ cơ sở dữ liệu.
- trả về dữ liệu $; trả về dữ liệu khách hàng.
Vậy là xong phần mô hình của chúng ta. Bây giờ, hãy chỉnh sửa view welcome_message. Mở welcome_message.php nằm trong thư mục:
application/views/welcome_message.php
Hãy thay thế đoạn mã sau bằng đoạn mã tiếp theo:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>CodeIgniter MVC Basics</title> </head> <body> <h1>Customer Details Card</h1> <p>Customer ID : <strong><?=$customer['id']?></strong></p> <p>First Name : <strong><?=$customer['first_name']?></strong></p> <p>Last Name : <strong><?=$customer['last_name']?></strong></p> <p>Address : <strong><?=$customer['address']?></strong></p> </body> </html>
Lưu các thay đổi và tải tệp sau. URL trong trình duyệt web: http://localhost:3000/Bạn sẽ thấy thẻ khách hàng như hình ảnh bên dưới.



