Khung CodeIgniter MVC(Model View Controller) kèm ví dụ
MVC là gì?
Tiêu chuẩn MVC cho Model-View-Control. Đâ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 xử lý logic nghiệp vụ và tương tác cơ sở dữ liệu
2. Controller điều phối các hoạt động giữa model và view
3. View chịu trách nhiệm trình bày dữ liệu
Sau đây là một số lợi thế của mô hình kiến trúc MVC
- Khớp nối 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 – người ta có thể dễ dàng thực hiện các thay đổi đối với từng thành phần riêng lẻ
- Tăng năng suất – nhiều người có thể làm việc trên dự án cùng một lúc. Các nhà phát triển giao diện người dùng có thể làm việc trên các chế độ xem và trình bày trong khi các nhà phát triển phụ trợ có thể tập trung vào các mô hình và vì hệ thống được liên kết lỏng lẻo nên nó hoạt động vào cuối ngày
Mẫu
Mô hình chịu trách nhiệm tương tác với các nguồn dữ liệu. Đây thường là cơ sở dữ liệu nhưng cũng có thể là dịch vụ cung cấp dữ liệu được yêu cầu. Thực tế phổ biến là có logic nghiệp vụ trong các mô hình thay vì bộ điều khiển. Cách thực hành này thường được gọi là bộ điều khiển gầy mô hình béo.
Mô hình thường ghi dữ liệu vào cơ sở dữ liệu, cung cấp cơ chế chỉnh sửa, cập nhật và xóa dữ liệu. Trong ứ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ư bản ghi hoạt động để giúp 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 để hỗ trợ các mô hình trong khi các framework khác như Laravel sử dụng Eloquent Object Relational Mapper (ORM) để hỗ trợ 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ó đóng vai trò trung gian giữa mô hình và khung nhìn, đồng thời đô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 đối với những gì đã được gửi để đảm bảo rằng tất cả các tham số bắt buộc đã được gửi. Nếu thiếu thông tin, người dùng sẽ được chuyển hướng đến trang đăng ký với thông báo lỗi phù hợp được hiển thị. 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 bằng cách kiểm tra xem địa chỉ email đã gửi đã tồn tại hay chưa. Nếu tất cả các quy tắc xác thực đều vượt qua thì 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 JavaScript. Các chế độ xem chứa mã lập trình tối thiểu. Mã chứa trong các chế độ xem thường được sử dụng để lặp qua các bộ sưu tập dữ liệu được nhận dưới dạng tham số từ mô hình hoặc hàm trợ giúp để dọn dẹp dữ liệu hoặc tạo liên kết để chỉnh sửa các bản ghi. Hầu hết các ứng dụng web hiện đại thường sử dụng các công cụ tạo mẫu xác định cú pháp riêng của chúng giống như mã giả và có thể dễ dàng được các nhà thiết kế hiểu. Khi làm việc với CodeIgniter, thông lệ chung là sử dụng các thẻ PHP ngắn và các cấu trúc điều khiển. Để hiển thị một cái gì đó trong CodeIgniter, người ta có thể sử dụng mã sau
<?=$title?>
Như trái ngược 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, chế độ xem sẽ sử dụng kết hợp PHP và HTML thay vì bao bọc mọi thứ bằng mã PHP thuần túy.
Khung MVC hoạt động như thế nào?
Hình ảnh sau đây cho thấy hoạt động của khung 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ả kết quả trở lại trình duyệt dưới dạng mã HTML mà trình duyệt diễn giải thành định dạng mà con người có thể đọc được và hiển thị cho người dùng.
Bộ điều khiển CodeIgniter
Bây giờ hãy phân tích những gì vừa xảy ra khi chúng tôi tải URL trên vào trình duyệt web.
Mở file Bộ điều khiển Welcome.php nằm trong ứng dụng/bộ điều khiển
Bạn sẽ có thể 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,
- đã xác định('BASEPATH') OR exit('Không cho phép truy cập tập lệnh trực tiếp'); ngăn chặn quyền truy cập trực tiếp vào bộ điều khiển nếu yêu cầu không đến thông qua index.php. đây là vì mục đích bảo mật.
- lớp Welcome mở rộng CI_Controller {…} định nghĩa lớp Trình điều khiển Chào mừng và mở rộng lớp cha CI_Controller
- public function index(){…} xác định phương thức lập chỉ mục phản hồi URL
http://localhost:3000
- $this->load->view('welcome_message'); tải chế độ xem Welcome_message nằm trong thư mục ứng dụng/lượt xem
Bây giờ chúng ta sẽ cập nhật phương thức 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 customer_model và truyền tham số 3. Trong ví dụ này, chúng tôi đã mã hóa cứng giá trị nhưng trong các ứng dụng thực tế, đây sẽ là tham số từ URI.
- $this->load->view('welcome_message',$data); tải chế độ xem Welcome_message và chuyển biến $data vào chế độ xem
Mô hình CodeIgniter
Bây giờ hãy tạo chế độ xem mà chúng tôi đã tham chiếu trong đoạn mã trên. Để đơn giản, mô hình của chúng tôi sẽ không tương tác với cơ sở dữ liệu nhưng 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 hướng dẫn tiếp theo.
Tạo file Customer_model.php trong ứng dụng/models
Thêm mã sau đây
<?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) {…} xác định phương thức lấy khách hàng dựa trên id khách hàng
- $data[…] xác định các giá trị tĩnh của khách hàng hư cấu của chúng tôi. Đâ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.
Đó là, nó dành cho mô hình của chúng tôi. Bây giờ chúng ta hãy sửa đổi chế độ xem Welcome_message
Mở Welcome_message.php nằm ở
application/views/welcome_message.php
Thay thế mã bằng mã sau
<!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
Tải URL sau vào trình duyệt web
http://localhost:3000/
Bạn sẽ có thể nhìn thấy thẻ khách hàng như trong hình bên dưới
Tổng kết
- VMC là một mô hình kiến trúc chia ứng dụng thành ba thành phần chính
- Model chịu trách nhiệm tương tác với các nguồn dữ liệu
- Bộ điều khiển lắng nghe các yêu cầu tài nguyên đến từ người dùng
- Trong các ứng dụng web, các khung nhìn thường chứa HTML, CSS và tùy chọn JavaScript
- 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 thiết sau đó trả kết quả về trình duyệt dưới dạng mã HTML