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.

  • 🏗️ Mô hình cốt lõi: MVC chia ứng dụng thành các thành phần: mô hình (model), giao diện người dùng (view) và bộ điều khiển (controller).
  • 💾 Model: Nó tương tác với nguồn dữ liệu và chứa logic nghiệp vụ, thường thông qua Active Record.
  • 🎛️ Người điều khiển: Lắng nghe các yêu cầu, xác thực dữ liệu đầu vào và điều phối mô hình và giao diện người dùng.
  • 🖼️ Lượt xem: Trình bày dữ liệu dưới dạng HTML, CSS và PHP tối thiểu, loại bỏ các logic phức tạp.
  • 🔗 Khớp nối lỏng lẻo: Các thành phần hoạt động độc lập, do đó công việc ở phía giao diện người dùng và phía máy chủ có thể chạy song song.
  • Từ khóa ngắn: CodeCác view trong Igniter thường sử dụng các thẻ echo PHP ngắn gọn để tạo ra các mẫu template gọn gàng hơn.
  • 🔁 Luồng yêu cầu: Từ Controller đến Model, rồi đến View, sau đó HTML lại được gửi về trình duyệt.

CodeKhung MVC Igniter

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:

  1. Mô hình này xử lý logic nghiệp vụ và tương tác với cơ sở dữ liệu.
  2. 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.
  3. 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.

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.

Thẻ thông tin khách hàng được tạo bởi CodeIgnite

Câu Hỏi Thường Gặp

Điều đó có nghĩa là logic kinh doanh nằm trong mô hình, giữ nguyên như vậy.ping Bộ điều khiển được thiết kế gọn nhẹ và tập trung vào việc định tuyến các yêu cầu. Điều này giúp cho logic có thể tái sử dụng và bộ điều khiển dễ đọc, dễ kiểm thử hơn.

Một giao diện chỉ nên hiển thị dữ liệu. Giữ nguyên như vậy.ping Việc tách biệt logic giúp phân tách các mối quan tâm, cho phép các nhà thiết kế chỉnh sửa bố cục mà không ảnh hưởng đến các quy tắc nghiệp vụ, và cùng một dữ liệu có thể được hiển thị ở các chế độ xem khác nhau.

Active Record là một trình tạo truy vấn tích hợp cho phép các mô hình đọc và ghi vào cơ sở dữ liệu bằng các lệnh gọi phương thức thay vì sử dụng SQL thô. Nó cũng giúp ngăn chặn tấn công SQL injection bằng cách...ping các giá trị.

Trí tuệ nhân tạo (AI) có thể tạo ra các tệp điều khiển, mô hình và hiển thị phù hợp từ mô tả của một tính năng, đồng thời duy trì tính nhất quán trong việc đặt tên. RevHãy xem xét các truy vấn và quá trình xác thực được tạo ra trước khi chạy chúng.

Thẻ `echo` ngắn gọn là một cách để in giá trị trong view một cách nhỏ gọn. Khối thẻ `<p>` đầy đủ của PHP được sử dụng cho các câu lệnh và cấu trúc điều khiển. Cả hai đều tương đương nhau về mặt xuất dữ liệu, nhưng thẻ ngắn giúp view trông gọn gàng hơn.

Tóm tắt bài viết này với: