Bài giảng Mã nguồn mở - Chương 7: Mô hình PHP MVC - Nguyễn Minh Thành

Framework PHP MVC cơ bản

phần mềm.

FW cung cấp các chức năng chung, phổ biến và có thể tái sử dụng cho các lập trình viên để phát triển các giải pháp, các phần mềm khác nhau.

FW giúp các lập trình viên không phải xây dựng hệ thống từ đầu, tiết kiệm thời gian trong quá trình phát triển phần mềm.

Có nhiều Framework có sẵn như : .NET FW, Zend FW, Spring FW,

Để sử dụng tốt một Framework cần nhiều thời gian.

Có thể xây dựng một Framework riêng để đỡ mất thời gian huấn luyện và FW gọn nhẹ.

Các bước xây dựng Framework MVC đơn giản cho website PHP như sau :

Bước 1 : Xây dựng cấu trúc thư mục FW

application – code chỉ định cho ứng dụng
config – cấu hình Database
db – sao lưu dữ liệu
library – chứa framework
public – Các file hình ảnh cho ứng dụng
scripts –Các script nhúng
tmp – dữ liệu tạm

 

pptx42 trang | Chia sẻ: trungkhoi17 | Lượt xem: 412 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Mã nguồn mở - Chương 7: Mô hình PHP MVC - Nguyễn Minh Thành, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Mô hình php mvcGiảng viên : ThS. Nguyễn Minh ThànhEmail : thanhnm@itc.edu.vnChương 7 : Môn Các Hệ Thống Mã Nguồn Mở1Nội DungKhái niệm về kiến trúc phần mềmTổng quan về kiến trúc 3 lớpTổng quan về kiến trúc MVCSo sánh MVC và 3 lớpXây dựng website PHP MVC đơn giản Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở2Khái niệm về kiến trúc phần mềmMôn Các Hệ Thống Mã Nguồn Mở3“Kiến trúc phần mềm của một chương trình hoặc hệ thống tính toán là cấu trúc hoặc các cấu trúc của hệ thống đó, gồm các thành phần của phần mềm, các thuộc tính có thể trông thấy được từ bên ngoài của các thành phần này, và các mối quan hệ giữa chúng.”Phát triển phần mềm theo một kiến trúc nhất định sẽ giúp cho việc quản lý hệ thống được tốt hơn và tận dụng tài nguyên của hệ thống hiệu quả hơn. Đồng thời cũng dễ bảo trì và mở rộng.Tổng quan về mô hình 3 lớpMôn Các Hệ Thống Mã Nguồn Mở4Để dễ quản lý các thành phần của hệ thống, cũng như không bị ảnh hưởng bởi các thay đổi, người ta hay nhóm các thành phần có cùng chức năng lại với nhau và phân chia trách nhiệm cho từng nhóm để công việc không bị chồng chéo và ảnh hưởng lẫn nhau. Một trong những mô hình lập trình như vậy đó là Mô hình 3 lớp (Three Layers).Các thành phần trong 3-LayerMôn Các Hệ Thống Mã Nguồn Mở5Mô hình 3 lớp được cấu thành từ: Presentation Layers, Business Logic Layers, và Data Access Layers.  Cách vận hành của mô hìnhMôn Các Hệ Thống Mã Nguồn Mở6Đối với 3-Layer, yêu cầu được xử lý tuần tự qua các layer như hình. - Đầu tiên User giao tiếp với Presentation Layers (GUI) để gửi đi thông tin và yêu cầu. Tại layer này, các thông tin sẽ được kiểm tra, nếu OK chúng sẽ được chuyển xuống Business Logic Layer (BLL). - Tại BLL, các thông tin sẽ được nhào nặn, tính toán theo đúng yêu cầu đã gửi, nếu không cần đến Database thì BLL sẽ gửi trả kết quả về GUI, ngược lại nó sẽ đẩy dữ liệu (thông tin đã xử lý) xuống Data Access Layer (DAL). - DAL sẽ thao tác với Database và trả kết quả về cho BLL, BLL kiểm tra và gửi nó lên GUI để hiển thị cho người dùng. - Một khi gặp lỗi (các trường hợp không đúng dữ liệu) thì đang ở layer nào thì quăng lên trên layer cao hơn nó 1 bậc cho tới GUI thì sẽ quăng ra cho người dùng biết - Các dữ liệu được trung chuyển giữa các Layer thông qua một đối tượng gọi là Data Transfer Object (DTO), đơn giản đây chỉ là các Class đại diện cho các đối tượng được lưu trữ trong Database.  Tổ chức mô hình 3-Layer Có rất nhiều cách đặt tên cho các thành phần của 3 lớp như: Cách 1: GUI, BUS, DAL Cách 2: GUI, BLL, DAO, DTO Cách 3: Presentation, BLL, DALTổng quan mô hình MVCMVC là một mô hình trong phát triển phần mềm chuyên giành cho website.Môn Các Hệ Thống Mã Nguồn Mở7Các Thành Phần Trong MVCTrong kiến trúc này, hệ thống được chia thành 3 tầng tương ứng đúng với tên gọi của nó (Model – View – Controller). Ở đó nhiệm vụ cụ thể của các tầng được phân chia như sau: 1. Model (Tầng dữ liệu): là một đối tượng hoặc một tập hợp các đối tượng biểu diễn cho phần dữ liệu của chương trình. Nó được giao nhiệm vụ cung cấp dữ liệu cho cơ sở dữ liệu và lưu dữ liệu vào các kho chứa dữ liệu. Tất cả các nghiệp vụ logic được thực thi ở Model. Dữ liệu vào từ người dùng sẽ thông qua View đến Controller và được kiểm tra ở Model trước khi lưu vào cơ sở dữ liệu. Việc truy xuất, xác nhận, và lưu dữ liệu là một phần của Model Môn Các Hệ Thống Mã Nguồn Mở8Các Thành Phần Trong MVC2. View (Tầng giao diện): là phần giao diện với người dùng, bao gồm việc hiện dữ liệu ra màn hình, cung cấp các menu, nút bấm, hộp đối thoại, chọn lựa , để người dùng có thể thêm, xóa. sửa, tìm kiếm và làm các thao tác khác đối với dữ liệu trong hệ thống.. Thông thường, các thông tin cần hiển thị được lấy từ thành phần Models. 3. Controller (Tầng điều khiển): là phần điều khiển của ứng dụng, điều hướng các nhiệm vụ (task) đến đúng phương thức (method) có chức năng xử lý nhiệm vụ đó. Nó chịu trách nhiệm xử lý các tác động về mặt giao diện, các thao tác đối với models, và cuối cùng là chọn một view thích hợp để hiển thị ra màn hình. Môn Các Hệ Thống Mã Nguồn Mở9Ưu – nhược điểm1. Ưu điểm: Phát triển phần mềm: Có tính chuyên nghiệp hóa, có thể chia cho nhiều nhóm được đào tạo nhiều kỹ năng khác nhau, từ thiết kế mỹ thuật cho đến lập trình đến tổ chức database. Giúp phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp.. Bảo trì: Với các lớp được phân chia theo như đã nói, thì các thành phần của một hệ thống dễ được thay đổi, nhưng sự thay đổi có thể được cô lập trong từng lớp, hoặc chỉ ảnh hưởng đến lớp ngay gần kề của nó, chứ không phát tán náo loạn trong cả chương trình. Mở rộng: Với các lớp được chia theo ba lớp như đã nói, việc thêm chức năng vào cho từng lớp sẽ dễ dàng hơn là phân chia theo cách khác. 2. Nhược điểm: Đối với dự án nhỏ việc áp dụng mô hình MC gây cồng kềnh, tốn thời gian trong quá trình phát triể. Tốn thời gian trung chuyển dữ liệu của các tầngMôn Các Hệ Thống Mã Nguồn Mở10So sánh MVC và 3 lớpMôn Các Hệ Thống Mã Nguồn Mở111. Điểm giống: Tách rời programming core/business logic ra khỏi những phụ thuộc về tài nguyên và môi trường. Presentation Layer (PL) thể hiện giống như chức năng của View và Controller. Business Layer (BL) và Data Access Layer (DL) thể hiện giống như chức năng của Model. Như thế nhìn ở góc độ này, thì MVC tương đương với 3-layer (tất nhiên có chồng chéo như hình vẽ)So sánh MVC và 3 lớpMôn Các Hệ Thống Mã Nguồn Mở122. Điểm khác: Trong mô hình 3 lớp, quá trình đi theo chiều dọc, bắt đầu từ PL, sang BL, rồi tới DL, và từ DL, chạy ngược lại BL rồi quay ra lại PL.Còn trong mô hình MVC, dữ liệu được nhận bởi View, View sẽ chuyển cho Controller cập nhật vào Model, rồi sau đó dữ liệu trong Model sẽ được đưa lại cho View mà không thông qua Controller, do vậy luồng xử lý này có hình tam giác.Xây dựng website PHP MVC đơn giảnXây dựng website bookstore theo mô hình MVCB1 : Xây dựng cấu trúc Website như sau Thư mục controller chứa các thành phần điều kiển của ứng dụngThư mục model chứa các lớp đối tượng dữ liệuThư mục view chứa các thành phần giao diệnIndex.php là trang chủ của websiteMôn Các Hệ Thống Mã Nguồn Mở13Xây dựng website PHP MVC đơn giảnMôn Các Hệ Thống Mã Nguồn Mở14B2 : Xây dựng các đối tượng dữ liệuFile Book.php chứa khai báo lớp dữ liệu Booktitle = $title; $this->author = $author; $this->description = $des; } }?>Xây dựng website PHP MVC đơn giảnMôn Các Hệ Thống Mã Nguồn Mở15B2 : Xây dựng các đối tượng dữ liệuFile Database.php chứa các thao tác kết nối CSDL để lấy dữ liệu, ở đây để thao tác đơn, ví dụ chỉ demo có một mảng dữ liệu cho trước.Xây dựng website PHP MVC đơn giảnMôn Các Hệ Thống Mã Nguồn Mở16B3 : Xây dựng các đối tượng viewFile booklist.php để xem danh sách bookXây dựng website PHP MVC đơn giảnMôn Các Hệ Thống Mã Nguồn Mở17B3 : Xây dựng các đối tượng viewFile viewbook.php để xem một cuốn sáchXây dựng website PHP MVC đơn giảnMôn Các Hệ Thống Mã Nguồn Mở18B4 : Xây dựng các đối tượng controllerFile controller.php điều khiển các luồng truy cập,Khi Website có nhiều đối tượng dữ liệu, thì các controller sẽ được đặt tên theo từng loại dữ liệu. (vd : BookController, AuthorController)Xây dựng website PHP MVC đơn giảnMôn Các Hệ Thống Mã Nguồn Mở19B5 : Xây dựng trang chủ của websiteXây dựng website PHP MVC đơn giảnMôn Các Hệ Thống Mã Nguồn Mở20B6 : Thực Thi WebsiteXây dựng website PHP MVC đơn giảnMôn Các Hệ Thống Mã Nguồn Mở21B6 : Thực Thi WebsiteFramework PHP MVC cơ bảnMôn Các Hệ Thống Mã Nguồn Mở22Framework (FW) là một kiến trúc nền tảng để phát triển phần mềm. FW cung cấp các chức năng chung, phổ biến và có thể tái sử dụng cho các lập trình viên để phát triển các giải pháp, các phần mềm khác nhau.FW giúp các lập trình viên không phải xây dựng hệ thống từ đầu, tiết kiệm thời gian trong quá trình phát triển phần mềm.Có nhiều Framework có sẵn như : .NET FW, Zend FW, Spring FW,Để sử dụng tốt một Framework cần nhiều thời gian.Có thể xây dựng một Framework riêng để đỡ mất thời gian huấn luyện và FW gọn nhẹ.Framework PHP MVC cơ bảnMôn Các Hệ Thống Mã Nguồn Mở23Các bước xây dựng Framework MVC đơn giản cho website PHP như sau :Bước 1 : Xây dựng cấu trúc thư mục FWapplication – code chỉ định cho ứng dụng config – cấu hình Database db – sao lưu dữ liệu library – chứa framework public – Các file hình ảnh cho ứng dụng scripts –Các script nhúng tmp – dữ liệu tạmFramework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở24Lưu ý :1. Các bảng trong mySQL sẽ là chữ thường và số nhiều. Ví dụ : products, books, customers Các cột mã sẽ có mẫu : tênbảng_id. Ví dụ : Product_id,. 2. Các lớp model sẽ là số ít và in hoa chữ đầu. Ví dụ : Product, Book, Customer 3. Các lớp Controller thêm chữ Controller sau Model (có s). Ví dụ : BooksController, CustomersController 4. Các giao diện View sẽ được chứa trong thư mục của từng Model, tên thư mục là chữ thường số nhiều, và mỗi view sẽ có tên tùy vào hành động trong Controller. Ví dụ : books\view.php, books\viewall.php, books\buy.phpFramework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở25Mô hình hoạt độngFramework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở26Bước 2 : Tạo file .htaccess trong thư mục gốc để chuyển tất cả các request đến thư mục public.RewriteEngine onRewriteRule    ^$    public/    [L]RewriteRule    (.*) public/$1    [L]Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở27Bước 3 : Tạo file .htaccess trong thư mục public để chuyển tất cả các request đến file public/index.php để xử lý theo mẫu : public/index.php?url=PATHNAME (PATHNAME chính là đường dẫn được người dùng gõ)RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php?url=$1 [PT,L]Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở28Bước 4 : Tạo file index.php trong thư mục public để định nghĩa các hằng và gọi file bootstrap.phpFramework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở29Bước 5 : Tạo file bootstrap.php trong thư mục library. File này sẽ gọi các file cấu hình và các file khác.Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở30Bước 6 : Tạo file config.php và routing.php trong thư mục config 'admin/\1_\2/\3');//thêm một số routing cần thiết$default['controller'] = 'homes';$default['action'] = 'index';?>Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở32Bước 7 : Tạo file shared.php, đây là file chính sẽ phân tích request và gọi controller tương ứng/** Main Call Function **/function callHook() { global $url; $urlArray = array(); $urlArray = explode("/",$url); $controller = $urlArray[0]; array_shift($urlArray); $action = $urlArray[0]; array_shift($urlArray); $queryString = $urlArray; $controllerName = $controller; $controller = ucwords($controller); $model = rtrim($controller, 's'); $controller .= 'Controller'; $dispatch = new $controller($model,$controllerName,$action); if ((int)method_exists($controller, $action)) { call_user_func_array(array($dispatch,$action),$queryString); } else { /* Error Generation Code Here */ }}callHook();Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở33Bước 7 : trong file shared.php còn chứa hàm __autoload từ động tìm kiếm khai báo lớp khi có 1 đối tượng được tạofunction __autoload($className) { if (file_exists(ROOT . DS . 'library' . DS . strtolower($className) . '.class.php')) { require_once(ROOT . DS . 'library' . DS . strtolower($className) . '.class.php'); } else if (file_exists(ROOT . DS . 'application' . DS . 'controllers' . DS . strtolower($className) . '.php')) { require_once(ROOT . DS . 'application' . DS . 'controllers' . DS . strtolower($className) . '.php'); } else if (file_exists(ROOT . DS . 'application' . DS . 'models' . DS . strtolower($className) . '.php')) { require_once(ROOT . DS . 'application' . DS . 'models' . DS . strtolower($className) . '.php'); } else { /* Error Generation Code Here */ echo "Can not load class {$className}."; }}Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở34Bước 8 : tiếp theo ta sẽ xây dựng các đối tượng trong mô hình MVC. Các controller sẽ được kế thừa từ một lớp Controller gốc được chứa trong file library/controller.phpclass Controller { protected $_model; protected $_controller; protected $_action; protected $_template; function __construct($model, $controller, $action) { $this->_controller = $controller; $this->_action = $action; $this->_model = $model; $this->_template = new Template($controller,$action); } function set($name,$value) {$this->_template->set($name,$value); } function __destruct() { $this->_template->render(); }}Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở35Bước 8 : trong Controller có gọi lớp Template là lớp thực hiện việc render nội dung với view tương ứngclass Template { protected $variables = array(); protected $_controller; //tacgias protected $_action; //viewall function __construct($controller,$action) { $this->_controller = $controller; $this->_action = $action; } function set($name,$value) { $this->variables[$name] = $value; } function render() { . }}Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở36Bước 8 : các lớp Controller theo từng ứng dụng. Ví dụ : TacgiasController (trong thư mục application/controllers)_model(); $this->set('title','Tác giả : '.$name.' - Book Online App'); $this->set('datatable',$model->select($id)); } function viewall() { $model = new $this->_model(); $this->set('title','Danh sách tác giả - Book Online App'); $this->set('datatable',$model->selectAll()); } }Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở37Bước 8 : các view giao diện, ví dụ : viewall.php (trong thư mục application/views/tacgias/viewall.php) /"> Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở38Bước 8 : trong lớp TacgiasController có gọi tạo lớp Tacgia (lớp model) trong thư mục application/models/tacgia.php. Các lớp model thực chất là lớp kết nối CSDL để lấy dữ liệu theo từng câu truy vấn. Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở39Bước 8 : lớp Model cha (trong library)class Model extends SQLQuery { protected $_model; function __construct() { $this->connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME); $this->_model = get_class($this); //$this->_table = strtolower($this->_model)."s"; $this->_table = strtolower($this->_model); } function __destruct() { $this->disconnect(); }}Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở40Bước 8 : lớp SqlQuery gốc (trong library)<?phpclass SQLQuery { protected $_dbHandle; protected $_result; function connect($address, $account, $pwd, $name) { } function disconnect() { } function selectAll() { } function select($id) { } function query($query, $singleResult = 0) { }}Framework MVC cho website PHPMôn Các Hệ Thống Mã Nguồn Mở41Bước 9 : Gọi ứng dựng theo mẫuỏi Đáp ?Môn Các Hệ Thống Mã Nguồn Mở42

Các file đính kèm theo tài liệu này:

  • pptxbai_giang_ma_nguon_mo_chuong_7_mo_hinh_php_mvc_nguyen_minh_t.pptx
Tài liệu liên quan