Category: code viblo, lập trình hướng Đối tượng và kiến trúc mvc

1. Giới thiệu về MVC

1.1. Định nghĩa

MVC là một mô hình kiến tạo, giúp đỡ bạn tổ chức triển khai code theo từng phần độc lập cùng nhau, cùng các phần liên tưởng cùng nhau theo một bí quyết nhất quyết.

Bạn đang xem: Category: code viblo, lập trình hướng Đối tượng và kiến trúc mvc

1.2. Cách mà mô hình hoạt động

Trình phê chuẩn gửi một request lên VPS, server cảm nhận request đang so sánh cùng gửi tài liệu vào controller phụ thuộc vào router điều hướng. Trong vài ba trường đúng theo thì controller đang render luôn ra view (một template được gửi thành HTML) với gửi trả về đến trình duyệt y. Nhưng thường thì, cho các trang web động, controller đã tác động với một Mã Sản Phẩm (thay mặt mang đến 1 phần tử ví như Post, chịu đựng trách nát nhiệm giao tiếp cùng với cơ sở dữ liệu). Sau Khi điện thoại tư vấn vào Mã Sản Phẩm, controller vẫn render view với tài liệu lấy được và trả tác dụng về cho trình chu đáo nhằm hiển thị.

*

2. Xây dựng ứng dụng

2.1. Cấu trúc thỏng mục

|-- demo_mvc |-- assets |-- fonts |-- images |-- javascripts |-- stylesheets |-- controllers |-- models |-- views |-- layouts |-- application.php |-- connection.php |-- index.php |-- routes.phpGiải thích về cấu tạo tlỗi mục trên:

Tlỗi mục demo_mvc là thỏng mục đựng project.Tlỗi mục assets bao gồm những file font chữ, hình hình ảnh, javascript, css...Thư mục controlers chứa các tệp tin khái niệm các lớp controller, bao gồm các hàm trong các số ấy thúc đẩy với mã sản phẩm cùng Hotline ra view để trả về cho tất cả những người cần sử dụng.Thỏng mục models cất những file định nghĩa những lớp model, Chịu đựng trách nhiệm thao tác làm việc cùng với DataBase.Thỏng mục views chứa tlỗi mục layouts đựng template hiển thị tầm thường của trang web trong file application.phpCòn các file sẽ được trình làng rõ hơn sống các phần dưới.

Xem thêm: Tải Game Mai Cờ Ráp - ‎Minecraft Trên App Store

2.2. Thương hiệu dữ liệu

Trước không còn, hãy sinh sản một cơ sở dữ liệu đơn giản dễ dàng mang tên là demo_mvc gồm bảng posts với 3 trường: id (INT PRIMARY auto_increment), title (VARCHAR 255), content (TEXT)Bắt tay vào code thôi như thế nào.

2.3. Điều hướng luồng dữ liệu

Trước hết, tạo thành tệp tin index.php cùng với nội dung như sau:

# index.phprequire_once("connection.php");if (isset($_GET<"controller">)) $controller = $_GET<"controller">; if (isset($_GET<"action">)) $action = $_GET<"action">; else $action = "index"; else $controller = "pages"; $action = "home";require_once("routes.php");File này sẽ là tệp tin nhấn số đông yêu cầu truy nã vấn lên VPS. Bởi vậy, phần lớn băng thông truy vấn đều có dạng /?param=value hoặc /index.php?param=value.Đầu tiên, index.php chạy câu chữ trong tệp tin connection.php được dùng để làm liên kết với truy vấn vấn mang đến các đại lý dữ liệu, sử dụng PDO:

# connection.phpclass DB private static $instance = NULl; public static function getInstance() if (!isset(self::$instance)) try self::$instance = new PDO("mysql:host=localhost;dbname=demo_mvc", "root", ""); self::$instance->exec("SET NAMES "utf8""); catch (PDOException $ex) die($ex->getMessage()); return self::$instance; Quý Khách yêu cầu chỉnh sửa lại phần new PDO("mysql:host=;dbname=", "", "") sao để cho trùng cùng với công bố liên kết tới CSDL của chính mình.Sau Lúc chạy file connection.php, file index.php đã xử trí những tmê man số của đường dẫn, rõ ràng là lấy ra 2 tsay đắm số controller cùng action, rồi giữ giá trị của nó vào các biến để sau đây cần sử dụng mang đến vấn đề quyết định đã thao tác gì giỏi hiển thị câu chữ gì... Mặc định trường hợp không tồn tại các tham mê số này thì bọn chúng sẽ được gán quý hiếm là controller thì trỏ cho pages, còn action thì trỏ đến home.Và đây, tệp tin routes.rb đã Chịu đựng trách rưới nhiệm so với 2 biến đổi nhưng bọn họ vừa rước được nghỉ ngơi bước bên trên tiếp đến khẳng định phần view như thế nào sẽ được hiển thị.

# routes.php$controllers = array( "pages" => <"home", "error">); // Các controllers vào khối hệ thống với các action hoàn toàn có thể gọi ra trường đoản cú controller kia.// Nếu những tsay mê số cảm nhận tự URL không phù hợp lệ (ko thuộc danh mục controller và action có thể gọi// thì trang báo lỗi sẽ tiến hành gọi ra.if (!array_key_exists($controller, $controllers) || !in_array($action, $controllers<$controller>)) $controller = "pages"; $action = "error";// Nhúng file tư tưởng controller vào để có thể sử dụng được class định nghĩa vào file đóinclude_once("controllers/" . $controller . "_controller.php");// Tạo ra tên controller class trường đoản cú những cực hiếm lấy được từ bỏ URL sau đó gọi ra nhằm hiển thị trả về cho người dùng.$klass = str_replace("_", "", ucwords($controller, "_")) . "Controller";$controller = new $klass;$controller->$action();

2.4. Xây dựng BaseController

Mình sẽ khởi tạo 1 lớp BaseController để triển khai lớp cha cho những controller của khối hệ thống. lúc kia, mình đã rất có thể có mang những hàm mà lại hồ hết controller phần lớn có thể điện thoại tư vấn ra mà không phải có mang lại ngơi nghỉ mỗi controller.Tạo tệp tin base_controller.php vào tlỗi mục controllers:

# controllers/base_controller.phpclass BaseController protected $folder; // Biến có giá trị là thỏng mục nào kia trong thỏng mục views, chứa những file view template của phần đã truy cập. // Hàm hiển thị công dụng ra cho những người cần sử dụng. function render($tệp tin, $data = array()) // Kiểm tra tệp tin Call cho tất cả trường thọ tốt không? $view_tệp tin = "views/" . $this->thư mục . "/" . $tệp tin . ".php"; if (is_file($view_file)) // Nếu trường tồn tệp tin đó thì tạo nên những biến chứa cực hiếm truyền vào khoảng Điện thoại tư vấn hàm extract($data); // Sau kia lưu giữ giá trị trả về lúc chạy file view template cùng với các dữ liệu đó vào 1 phát triển thành còn chưa hiển thị luôn ra trình chăm bẵm ob_start(); require_once($view_file); $nội dung = ob_get_clean(); // Sau lúc tất cả tác dụng đã có giữ vào biến $nội dung, điện thoại tư vấn ra template chung của hệ thống đế hiển thị ra cho những người cần sử dụng require_once("views/layouts/application.php"); else // Nếu tệp tin muốn gọi ra ko tồn tại thì chuyển hướng đến trang báo lỗi. header("Location: index.php?controller=pages&action=error"); Hãy tạo ra file application.php vào thư mục views/layouts với ngôn từ nhỏng sau:

2.5. Xây dựng các trang tĩnh

Giờ bọn họ vẫn viết controller đầu tiên mang lại hệ thống, sẽ là PagesController, là file pages_controller.php được đặt vào thư mục controllers:

# controllers/pages_controller.phprequire_once("controllers/base_controller.php");class PagesController extends BaseController function __construct() $this->folder = "pages"; public function home() $data = array( "name" => "Sang Beo", "age" => 22 ); $this->render("home", $data); public function error() $this->render("error"); Trong tlỗi mục views, sinh sản thỏng mục pages đựng 2 tệp tin trang chủ.php và error.php với văn bản như sau:

# views/pages/home.php emang đến "Tên tôi là: $name, năm nay tôi $age tuổi";?># views/pages/error.php echo "Có lỗi xảy ra!";?>Bây giờ các bạn demo truy vấn cho trang /index.php hoặc trang /index.php?controller=pages&action=error giúp thấy hiệu quả

*

2.6.2. Hiển thị ngôn từ một bài bác viết

Cập nhật Mã Sản Phẩm Post bổ sung cập nhật thêm hàm find

# models/post.phpclass Post ... ... ... static function find($id) $db = DB::getInstance(); $req = $db->prepare("SELECT * FROM posts WHERE id = :id"); $req->execute(array("id" => $id)); $tòa tháp = $req->fetch(); if (isset($item<"id">)) return new Post($item<"id">, $item<"title">, $item<"content">); return null; Thêm action showPost vào PostsController:

# controllers/posts_controller.phprequire_once("controllers/base_controller.php");require_once("models/post.php");class PostsController extends BaseController ... ... ... public function showPost() $post = Post::find($_GET<"id">); $data = array("post" => $post); $this->render("show", $data); Tạo view cho show Post: Tạo tệp tin show.php trong thỏng mục views/posts

# views/posts/show.php emang lại "Tiêu đề: $post->title"; eđến " "; emang đến "Nội dung: $post->content";?>Bổ sung thêm action showPost vào controller posts vào routes.php:

# routes.php$controllers = array( "pages" => <"home", "error">, "posts" => <"index", "showPost">,);.........Cập nhật link ở trang index, trỏ đến trang show post:

# views/posts/index.phpemang đến "";foreach ($posts as $post) eđến "";eđến "";?>Và hiện giờ truy vấn test 1 link: /index.php?controller=posts&action=showPost&id=1

*

3. Tổng kết

Trên đấy là chỉ dẫn tạo nên một vận dụng PHPhường thuần sử dụng quy mô MVC dựa trên sự phát âm biết của bản thân.quý khách có thể vận dụng tứ tưởng trên để thường xuyên từ làm thử phần sửa văn bản nội dung bài viết, tuyệt xoá nội dung bài viết...Nếu có gì góp ý xuất xắc vướng mắc, hãy bình luận phía dưới nhé.Mọi chủ ý hầu như được hoan nghênh ạ!Cảm ơn vì chưng sẽ quan tâm đến bài viết.