MỤC LỤC
CHƯƠNG 1: KHÁI NIỆM VỀ WEB APPLICATION FRAMEWORK VÀ MÔ HÌNH MVC 6
1.1 Web Application Framework là gì? 6
1.2. PHP Framework 6
1.3 MVC là gì? 7
1.3.1. Lịch sử MVC 7
1.3.2. Vai trò của các thành phần M-V-C trong Web framework 8
CHƯƠNG 2. GIỚI THIỆU FRAMEWORK ĐÃ XÂY DỰNG 13
2.1. Tổng quan về framework đã xây dựng 13
2.2. Kiến trúc của Hiphop framework 16
2.2.1 Tổng quát về hệ thống thư mục trong Hiphop framework 16
2.2.2 Các thành phần cốt lõi 17
CHƯƠNG 3. CÁC KHÁI NIỆM BAN ĐẦU KHI XÂY DỰNG ỨNG DỤNG WEB BẰNG HIPHOP FRAMEWORK 23
3.1. Hiphop URLs 23
3.2. Các lớp Controller 23
3.3. View - Template 25
3.4. Các lớp Model 28
CHƯƠNG 4: HỆ THỐNG CÁC LỚP THƯ VIỆN VÀ HÀM HỖ TRỢ 30
4.1 Các lớp thư viện 30
4.1.1. Email library 30
4.1.2. Database library 31
4.1.3. Phân trang với Pagination class 33
4.1.4. Quản lý Session PHP với session class 34
4.1.5. Tạo hình ảnh Captcha với Captcha class 35
4.1.6. Tải file lên server với Upload class 36
4.1.7. Tải file với giao thức FTP - FTP class 36
4.2 Các Helper 36
4.2.1. Array Helper 36
4.2.2. Text Helper 37
4.2.3. URL helper 38
CHƯƠNG 5: ÁP DỤNG HIPHOP FRAMEWORK XÂY DỰNG TRANG BLOG CÁ NHÂN 40
KẾT LUẬN 44
46 trang |
Chia sẻ: netpro | Lượt xem: 2617 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Khóa luận Xây dựng nền tảng hỗ trợ lập trình web dựa trên mô hình MVC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
g thái của Model thành cấu trúc trực quan. Do vậy dữ liệu của Model cần được định nghĩa một cách hợp lý. Sự tách biệt của hai thành phần này sẽ giúp cho người lập trình phân định được một biên giới rõ ràng giữa cách thức lưu trữ/lấy dữ liệu và cách trình bày dữ liệu. Do vậy tính phức tạp của quy trình lấy dữ liệu, xử lý dữ liệu cũng như (sự thay đổi của chúng theo thời gian) trước khi trả về sẽ không làm ảnh hưởng đến việc trình bày dữ liệu. Rõ ràng sự khác biệt về công nghệ lấy dữ liệu và công nghệ sinh trang không gây ảnh hưởng đến ứng dụng. Điều này khá quan trọng trong việc tích hợp các ứng dụng. Ngoài ra, cách làm này thực sự đảm bảo việc tách biệt vai trò của người thiết kế giao diện với vai trò của lập trình viên thiên về dữ liệu. Như vậy khi làm việc theo nhóm, người quản trị dự án có thể tổ chức nhóm phát triển thành các nhóm kĩ năng và phát triển ứng dụng song song với nhau.
Các công nghệ thường được sử dụng ở View là HTML, CSS và JavaScript.
Hình 1.0.2 Biểu đồ tuần tự một chuỗi MVC đơn giản
Tóm lại, MVC chia trách nhiệm công việc thành ba phần riêng rẽ:
Phát triển (development): Các nhà phát triển làm việc với model. Đặc trưng của phần này là tận dụng một cách triệt để kiến thức, kỹ năng của các lập trình viên liên quan tới thuật toán xử lý dữ liệu, quản trị cơ sở dữ liệu...
Thiết kế (design): Các nhà thiết kế làm việc trực tiếp với lớp View, chịu trách nhiệm tạo ra "cảm quan" cho ứng dụng. Họ cần có kinh nghiệm làm việc với HTML, CSS, JavaScript và Graphic Design.
Hợp nhất (intergration): phần này tồn tại trong lớp Controller. Mục đích chính là gắn kết developer và designer với nhau. Người hợp nhất không cần có nhiều kinh nghiệm làm việc với dữ liệu như lập trình viên nhưng cần nắm rõ cách tổ chức của một ứng dụng.
Mô hình MVC được áp dụng rất nhiều trong các Web framework hiện nay. Các PHP framework phổ biến nhất:
Zend framework: là sản phẩm của Zend – công ty “bảo trợ” cho PHP. Với các tính năng mạnh mẽ, Zend framework thường được sử dụng cho các công ty lớn, và bạn cần phải có lượng kiến thức khá sâu rộng về PHP để có thể sử dụng được Zend framework.
CakePHP: là một lựa chọn tốt cho những lập trình viên có kiến thức nâng cao về PHP. Nó dựa trên cùng một nguyên tắc thiết kế với Ruby on Rails (một framework dành cho các nhà phát triển các ứng dụng web bằn ngôn ngữ Rail). Với các hệ thống hỗ trợ, tính đơn giản và mỗi trường mở cao đã giúp cho CakePHP trở thành một trong những framework phổ biến nhất hiện nay.
CodeIgniter: một MVC framework viết bằng PHP4 (gần đây đã tương thích hoàn toàn với PHP 5.3.0 trong phiên bản 1.7.2). Được biết đến như một framework dễ hiểu và dễ sử dụng. CodeIgniter được Rasmus Lerdorf – cha đẻ của ngôn ngữ PHP – đánh giá rất cao vì tính tinh giản về cấu trúc, đạt hiệu năng cao khi vận hành. Không giống như Symfony, PHP framework này phục vụ mục đích lý tưởng cho việc xây dưng các ứng dụng chia sẻ, lưu trữ. Nó cung cấp các giải pháp đơn giản, và có một thư viện video hướng dẫn phong phú, diễn đàn hỗ trợ, và cung cấp sẵn một hướng dẫn sử dụng cho người mới bắt đầu. PHP framework này rất phù hợp cho một người mới làm quen với framework.
Joomla! v1.5.x: một hệ quản trị nội dung nguồn mở được phát triển theo mô hình MVC trong các phần mở rộng (extensions), bao gồm các thành phần (components) và các mô đun (modules).
Cảm thấy chưa thỏa mãn với mô hình hiện tại của các framework, chúng tôi đã nghiên cứu và phát triển được một framewok hoàn toàn mới, giải quyết được mọi yêu cầu trong các bài toàn phát triển web.
CHƯƠNG 2. GIỚI THIỆU FRAMEWORK ĐÃ XÂY DỰNG
2.1. Tổng quan về framework đã xây dựng
Sau một quá trình tìm tòi và phát triển, chúng tôi đã xây dựng được một PHP framework hoàn toàn mới, có nhiều ưu điểm so với các framework hiện nay. Chúng tôi đặt tên framework này là Hiphop framework.
Hiphop framework là một PHP5 framework được viết ra nhằm mục đích tận dụng mọi ưu điểm của mô hình MVC trong việc xây dựng các ứng dụng web động bằng ngôn ngữ PHP. Hiphop giúp các lập trình viên tạo nên các ứng dụng web có kiến trúc sáng sủa, dễ bảo trì và dễ mở rộng. Bên cạnh đó, Hiphop cho phép các nhà phát triển xây dựng một ứng dụng web nhanh hơn rất nhiều so với việc viết mã thuần túy bằng cách cung cấp một bộ thư viện đầy đủ cho các tác vụ thông thường, cũng như cung cấp một mô hình tương tác đơn giản và dễ hiểu cho việc kết nối tới những bộ thư viện đó.
Hiphop mang theo một triết lý riêng về tổ chức ứng dụng web từ mô hình MVC cho đến kiến trúc phân cấp Controller. Vì thế, Hiphop mang theo nhiều điểm khác biệt so với các PHP framework đương đại.
Hình 2.0.1 Mô hình MVC được áp dụng trong Hiphop framework
Các đặc điểm nổi bật của Hiphop framework bao gồm:
Tính dễ sử dụng (với cả các lập trình viên chưa có nhiều kinh nghiệm)
Kiến trúc MVC hiện đại: mô hình dữ liệu (Model), điều khiển ứng dụng (Controller), chức năng hiển thị (View)
Khả năng tổ chức ứng dụng thành các lớp Controller đa tầng, giúp ứng dụng có tính module hóa
Tốc độ xử lý rất nhanh so với các PHP Framework đương đại nhờ kiến trúc khá thông minh và mã được tinh giản, tối ưu cao
Hệ thống lớp truy xuất Database mạnh mẽ, hỗ trợ tạo nhiều kết nối Database đến các máy chủ database khác nhau trên cùng một request.
Thư viện hỗ trợ caching
Mềm dẻo trong việc định tuyến URL (URL Routing)
Ngoài ra, Hiphop framework tích hợp thêm vào một số lớp thư viện mà các framework khác chưa mặc định tích hợp:
Gửi Email, hỗ trợ đính kèm, HTML/Text email, đa giao thức (sendmail, SMTP, and Mail) – Email Class
Thư viện chỉnh sửa ảnh (cắt ảnh, thay đổi kích thước, xoay ảnh, v.v..) – Image Class
Đăng tải một file lên server – Upload Class
Tương tác với máy chủ thông qua giao thức FTP - FTP Class
Phân trang tự động – Pagination Class
Nén file - Zip Encoding Class
Tạo ảnh Captcha - một loại kiểm thử dạng hỏi đáp được dùng trong máy tính để xác định xem người dùng có phải là con người hay không - Captcha Class
Một lượng lớn các hàm hỗ trợ (helpers)
Bên cạnh đó là thư viện hàm hỗ trợ (helper) phong phú đi kèm.
Yêu cầu hệ thống khi sử dụng Hiphop framework:
Để hệ thống vận hành được, yêu cầu tối thiểu sau cần được đáp ứng:
Web server: Apache, Nginx, Lighttpd
PHP 5.2.6 trở lên
Database (tùy chọn): MySQL (4.1+), MySQLi
Khuyến cáo:
Web server: Apache 2.2.11 kết hợp với PHP như là một module
PHP 5.2.6 trở lên có bật APC
2.2. Kiến trúc của Hiphop framework
2.2.1 Tổng quát về hệ thống thư mục trong Hiphop framework
Hình 2.0.2 Cấu trúc cây thư mục Hiphop framework
Application
Nơi lưu trữ ứng dụng của bạn. Chia làm ba thư mục con:
Controller: chứa các Controller của ứng dụng
Model: chứa các Model của ứng dụng
View: chứa các View của ứng dụng
Config
Chứa các file cấu hình hệ thống, gồm các thư mục:
Autoload: liệt kê các helper, library, model tự động load khi ứng dụng khởi động
Database: cầu hình để kết nối với các database
Helper
Nơi lưu trữ các hàm hỗ trợ lập trình tối ưu
Libraries
Chứa các thư viện hỗ trợ xử lý các vấn đề nghiệp vụ
Hiphop
Chứa các lớp và hàm cốt lõi của Hiphop
Database
Chứa các lớp xử lý truy xuất tới các hệ quản trị cơ sử dữ liệu khác nhau
2.2.2 Các thành phần cốt lõi
Trước hết ta cần tìm hiểu quy trình xử lý một HTTP request của ứng dụng viết bởi PHP framework. Biểu đồ sau minh họa điều đó.
Hình 2.0.3 Quy trình xử lý một HTTP request - Hiphop framework
Bước 1. File index.php được dùng như một front controller, có nhiệm vụ khởi tạo các tài nguyên cơ bản cần thiết cho việc chạy Hiphop framework.
Bước 2. Lớp Router kiểm tra HTTP requsest để xác nhận những việc phải làm.
Bước 3. Nếu file đệm (cache file) tồn tại, nó gửi trực tiếp nội dung cache file đó tới trình duyệt. Nếu không, Controller phù hợp với yêu cầu sẽ được gọi tiếp theo sau đó.
Bước 4. Các Controller nạp vào các model, các thư viện lõi (library), các hàm sử dụng và bất kỳ tài nguyên khác cần cho việc xử lý một yêu cầu cụ thể.
Bước 5. Cuối cùng thành phần View được tạo ra và được gửi trực tiếp tới trình duyệt.
Hình 2.0.4 Mô phỏng cấu trúc các thành phần cốt lõi trong Hiphop framework
Các thành phần cốt lõi tạo nên Hiphop framework:
a. File index.php
Là file đầu tiên được gọi khi một yêu cầu người dùng được gửi tới hệ thống. Nhiệm vụ của file này là đọc giá trị biến route từ chuỗi truy vấn (query string), khởi tạo các lớp cơ sở (Input, Output, Route, Registry). Sau đó gọi hàm call_user_func_array() trong PHP để chạy các hàm, lớp tương ứng với giá trị biến route. Sau cùng là hàm $output->display() trả về cho trình duyệt chuỗi HTML do các View cung cấp (được gọi từ Controller).
b. Class Input (system/libraries/Input.php)
Là lớp được khởi tạo mặc định trong file index.php. Lớp này cung cấp các hàm hỗ trợ việc lấy các input data: $_GET, $_POST, $_SERVER….
c. Class Registry (system/hiphop/Registry.php)
Là một final class Registry được tạo ra nhằm quản lý toàn bộ các đối tượng đã được khởi tạo từ các lớp cơ bản (Input, Output, DB,…). Registry class tận dụng kĩ thuật lập trình hướng đối tượng để đảm bảo việc tạo đối tượng chỉ diễn ra một lần trong toàn bộ chu kì sống của một yêu cầu (request).
Hình 2.0.5 Lớp Registry
d. Router object (khởi tạo từ class Router trong system/libraries/Router.php)
Router là một đối tượng được khởi tạo khi Hiphop vận hành nhằm chuyển tiếp cấu trúc request dạng mảng $_GET do URL resolver sinh ra đến một lớp Controller. Nó có vai trò trung gian trong việc tiếp nhận thành phần request được chuẩn hóa từ URL resolver, phân tích đặc tả quy ước, tìm kiếm lớp Controller có thể xử lý request và các thao tác xử lý khác liên quan đến việc này.
Hình 2.0.6 Lớp Router
e. Output object (khởi tạo từ class Output trong system/libraries/Output.php)
Cũng là đối tượng được khởi tạo trong index.php với mục đích cập nhật luồng dữ liệu HTML được tạo ra từ các View.
Hình 2.0.7 Lớp Output
f. Loader object (khởi tạo từ class Loader trong system/libraries/Loader.php)
Đóng vai trò là một biến của lớp Controller.
Hình 2.0.8 Lớp Loader
function view()
Ghi nhận chuỗi HTML do View trả lại vào biến $output
function helper()
Nạp các thư viện hàm hỗ trợ (helpers) được yêu cầu
function library()
Nạp và khởi tạo các lớp thư viện được yêu cầu
function model()
Tạo đối tượng từ lớp Model được yêu cầu
function database()
Khởi tạo kết nối tới database (Cấu hình kết nối tới các database được thiết đặt trong file system/config/database.php)
g. class Controller (system/libraries/Controller.php)
Là lớp Controller cơ sở, làm nên sự khác biệt về mặt tổ chức code của ứng dụng trên Hiphop framework so với các framework khác. Controller dùng các magic method (một khái niệm về các phương thức đặc biệt trong PHP) như __set, __get để quản lý các biến trong chính controller do lập trình viên tạo ra.
Hình 2.0.9 Lớp Controller
Mọi lớp Controller trong ứng dụng của bạn đều phải thừa kế từ lớp Controller cơ sở.
h. Database (system/libraries/Database.php)
Database là phần PHP giao tiếp tốt nhất. Các hệ quản trị cơ sở dữ liệu mở mạnh mẽ và phong phú: OCI (Oracle đóng góp), DB2 (IBM đóng góp), libmysql (MySQL AB đóng góp), pgsql do cộng đồng PostgreSQL đóng góp và luôn hỗ trợ các bản database mới nhất. Ngoài ra PHP có sẵn một database server SQLite nhúng đi kèm với mọi bản PHP 5.0+ có thể giúp các lập trình viên tiện trong việc xử lý các nhóm data nhỏ nhưng đủ mạnh mẽ như Microsoft Access.
Hiphop framework cung cấp một thư viện giao tiếp với MySql - hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới và được các nhà phát triển rất ưa chuộng khi lựa chọn giải pháp lưu trữ thông tin. Thư viện này không chỉ giúp tiết kiệm được thời gian khi lập trình viên làm việc với hệ thống database mà còn giúp lập trình viên tránh được các lỗi báo mật (SQL Injection) khi viết câu lệnh SQL.
i. Các thư viện – Library (các class đặt trong thư mục system/libraries)
Hiphop cung cấp một tập hợp các thư viện hỗ trợ lập trình đa dạng, giúp các lập trình viên xây dựng ứng dụng web nhanh và hiệu quả hơn. Mỗi thư viện thực chất là một PHP class chứa nhiều các phương thức trong nó, và cũng có thể được gọi như những lớp Model.
$this->load->library('name_library', 'alias');
$this->alias->function();
Chúng ta sẽ tìm hiểu cụ thể các lớp thư viện trong Hiphop framework vào Chương IV.
k. Các hàm trợ giúp – Helper (đặt trong thư mục system/helpers)
Không giống với Library, Helper không phải là một class hướng đối tượng, chỉ là một file chứa một hoặc nhiều hàm cùng tập trung hỗ trợ một nhiệm vụ cụ thể trong quá trình xây dựng ứng dụng. Ví dụ: Cookie Helper là chứa một tập hợp các hàm xử lý các vấn đề liên quan tới cookie (thiết đặt/sửa/xóa cookie).
Load một helper từ controller:
$this->load->helper('name');
Sau khi được load, có thể dùng ngay các hàm có trong Helper ở bất cứ đâu. Ví dụ:
Trong chương IV, chúng ta sẽ tìm hiểu các lớp thư viện và hệ thống các hàm helper phong phú được tích hợp trong Hiphop framework.
CHƯƠNG 3. CÁC KHÁI NIỆM BAN ĐẦU KHI XÂY DỰNG ỨNG DỤNG WEB BẰNG HIPHOP FRAMEWORK
3.1. Hiphop URLs
Hiphop framework nhìn website như một tập các trang web rời rạc, gắn kết với nhau qua URL và hệ thống thư viện mức code. URLs trong Hiphop framework được thiết kế nhằm mục đích thân thiện cả cho người và các bộ máy tìm kiếm.
Hình 3.0.1 Ví dụ một URL Hiphop framework:
Giá trị của biến route được truyền qua chuỗi truy vấn (query string) được coi như dữ liệu vào, Hiphop framework dùng giá trị này để xác định Controller nào sẽ được gọi để thực hiện yêu cầu của người dùng. Giá trị của route là một chuỗi các segment, nối với nhau bởi dấu “/”
Segment đầu tiên tượng trưng cho lớp (class) Controller sẽ được gọi
Segment thứ hai tượng trưng cho hàm (function) trong lớp Controller tương ứng
Segment thứ ba (tùy chọn) chỉ ra giá trị của tham số (param) được truyền tới hàm này
Ví dụ:
yousite.com/index.php?route= blog/detail/123
Khi nhận được URL này từ trình duyệt, Hiphop sẽ khởi tạo một đối tượng từ class Blog (trong Controller) và thực hiện phương thức detail trong class này với tham số 123
Hiphop framework nhìn nhận một trang web là tập hợp các thành phần HTML ghép nối với nhau, mỗi thành phần HTML lại được hợp thành từ nhiều thành phần HTML con. Mỗi thành phần HTML được gọi là View. Một View chỉ có thể được gọi từ một Controller tương ứng với nó.
3.2. Các lớp Controller
Các controller đóng vai trò mấu chốt trong những ứng dụng xây dựng bằng Hiphop framework. Controller được khai báo như là một PHP class bình thường, mở rộng (extends) từ lớp Controller cơ sở trong Hiphop. Tên của Controller class luôn phải trùng với tên file chứa nó và viết hoa chữ cái đầu tiên. Ví dụ: file header.php chứa class Header.
Controller gốc
Controller cấp 1
Controller cấp 2
Controller cấp 3
Controller cấp 2
Controller cấp 3
Trong Hiphop framework, các lớp controller được phân chia làm hai loại: controller gốc và controller con (cấp 1, 2…) tùy theo cấp của các thành phần View mà các lớp Controller gọi tới.
Controller gốc: được đặt tên dựa theo các URL, các phương thức bên trong controller gốc tạo ra tùy thuộc vào yêu cầu gửi từ mỗi URL. Một lớp Controller gốc thường chứa nhiều method và đó chính là điểm vào chương trình và là nơi HTML page được sinh ra. Một controller gốc có thể chứa nhiều con là controller con cấp 1.
Controller con: là một controller, chỉ có thể được gọi từ controller mức trên của mình mà không thể gọi trực tiếp qua URL. Controller con có nhiệm vụ chính là trả về cho controller cha thành phần View do chính controller này đảm nhiệm thông qua các dịch vụ lấy từ Model. Để khai báo các “con” của mình, controller cần khai báo một mảng gồm danh sách tên các controller con thông qua biến $this->children. Controller con chỉ chứa duy nhất một hàm có tên index().
Ví dụ về cây phân cấp controller một trang web trong Hiphop:
Hình 3.0.2 Minh họa Sơ đồ phân cấp controller trang chủ
3.3. View - Template
View đơn giản là một trang web hoặc một thành phần nhỏ trên trang (VD: header, footer, sidebar…) được định nghĩa bằng các file php chứa mã HTML và các biến logic, đặt trong thư mục application/views/. View không bao giờ được gọi một cách trực tiếp mà phải được gọi qua một Controller cụ thể. Mỗi controller “sở hữu” một view riêng biệt bằng cách khai báo biến $this->template trong nó.
Xét một ví dụ đơn giản để hiểu hơn về các khái niệm controller, view trong Hiphop framework.
Khi người dùng gõ vào thanh địa chỉ (address bar) của trình duyệt để tải về trang web có URL:
yoursite.com/index.php?route=blog/
Hiphop sẽ tìm tới file controller được đặt tên blog.php và nạp file này.
Chúng ta sẽ tìm hiểu cách thức tạo ra một lớp Controller thực sự trong một ứng dụng. Sử dụng một text editor, tạo file có tên blog.php có nội dung như sau và đặt vào thư mục application/controllers/
class Blog extends Controller {
function __construct() {
parent::__construct();
}
function index() {
$this->data = array('message' => 'Welcome to My Blog');
$this->template = "blogview";
$this->children = array("header");
$this->render(TRUE);
}
}
Trong ví dụ trên, controller gốc là Blog, controller con cấp một là Header được khai báo trong mảng $this->children().
Biến $this->children(): Khai báo các Controller con của Controller hiện tại
Biến $this->template(): Khai báo đường dẫn file View, chỉ ra template (view) của controller hiện tại. Trong mỗi controller việc khai báo template là điều bắt buộc.
Biến $this–>data: là biến kiểu array, được truyền tới blogview để hiển thị sau khi gọi hàm $this–>render(TRUE) trong phương thức index.
Lời gọi hàm $this–>render(TRUE): Là lời gọi bắt buộc phải có trong mỗi phương thức của controller. Tham số đi kèm là TRUE nếu controller này là controller gốc, là FALSE nếu controller là controller con. Dòng này thực thi các code PHP có trên view và trả lại một string chứa mã HTML cho toàn bộ trang nhưng không in chúng ra, thay vào đó, giá trị này được truyền vào biến $output khởi tạo từ class Output, một lớp có chức năng xử lý giao thức HTTP và trả lại cho trình duyệt. $this->render(params) luôn là dòng được viết cuối cùng trong phương thức.
Đây là các ràng buộc mà các lập trình viên phải tuân thủ khi xây dựng các ứng dụng để Hiphop framework hiểu và hỗ trợ.
Như đã nói ở trên, Segment thứ hai của URL chỉ ra phương thức nào trong Controller gốc sẽ được thực hiện. Khi Segment thứ hai trống, mặc định Hiphop sẽ thực hiện toàn bộ các dòng code nằm bên trong phương thức index(). Các method này chỉ là nơi điều phối các lớp khác để sinh ra HTML chứ không trả về HTML một cách trực tiếp cho trình duyệt thông qua giao thức HTTP.
Trở lại ví dụ trên, hãy tạo một file có tên blogview.php có nội dung như sau và đặt vào thư mục application/views/. Đây chính là thành phần View của Blog controller.
Tiếp theo, tạo Header controller (controller con) bằng cách tạo file header.php có nội dung như sau, đặt vào thư mục application/controller/
class Header extends Controller {
function __construct() {
parent::__construct();
}
function index() {
$this->id = 'header';
$this->data['title'] = 'Demo Blog';
$this->template = "header_view";
$this->render(FALSE);
}
Biến $this->id là thành phần bắt buộc phải khai báo trong mỗi Controller con, giá trị của biến $this->id sẽ được dùng làm tên biến truyền vào thành phần View của Controller cha, biến này chứa toàn bộ mã HTML do view của controller đó sinh ra. Nhìn vào dòng đầu tiên của blogview.php ta sẽ thấy biến $header được echo, đây chính là View của Header controller.
Hình 3.0.3 blogview.php Hình 3.0.4 header.php
header_view - view của Header controller được đặt trong thư mục application/view/:
Bây giờ, mở lại URL ban đầu bằng trình duyệt. Kết quả trên màn hình là trang web có title “Demo Blog” cùng dòng chữ: “Welcome to My Blog”
3.4. Các lớp Model
Các lớp Model là các PHP class thừa kế từ lớp Model cơ sở của Hiphop framework, được thiết kế với mục đích chính là xử lý các thông tin trong database. Ví dụ, để quản lý một Blog, bạn cần có một lớp model chứa các hàm làm các nhiệm vụ như: thêm, sửa, xóa hoặc đọc các dữ liệu bài viết.
class Blog_model extends Model {
function __construct()
{
parent::__construct();
}
function getTenEntries()
{
$query = $this->db->query('SECLECT * FROM entry LIMIT 10, 0');
return $query->result_array();
}
function insertEntry()
{
$this->db->query(“INSERT INTO entry VALUE {$_POST['title']}”s);
}
}
Các model được đặt trong thư mục application/model/. Có thể đặt vào các thư mục con trong của application/model/. Nguyên mẫu cơ bản của một lớp Model:
class Model_name extends Model { function __construct() { parent::__construct(); }}
Tên file chứa class này có dạng: model_name.php, trùng với tên class Model. Chú ý rằng, tên của class Model bắt buộc phải viết hoa chữ cái đầu tiên.
Các class Model được nạp và gọi từ các phương thức trong lớp Controller. Để làm được điều này, trong phương thức của Controller phải có hàm:
$this->load->model('Sub_folder/Model_name', 'name_object');
Tham số thứ hai định nghĩa tên của đối tượng được khởi tạo từ class Model_name. Nếu không có tham số thứ 2, tên của đối tượng này sẽ được Hiphop framework đặt trùng với tên của class Model. Chúng ta có thể truy cập tới các phương thức của lớp Model một cách dễ dàng sau khi đã load Model:
$this->load->model('Model_name', 'name');
$this->name->functionInModel();
Dưới đây là ví dụ về một lớp controller, lấy dữ liệu từ Model và truyền vào View
class Blog extends Controller { function index() { $this->load->model('Blog_model'); $this->data['entries'] = $this->Blog_model->getNewsEntries();
$this->template = 'blog_view';
$this->render(TRUE);
}}
CHƯƠNG 4: HỆ THỐNG CÁC LỚP THƯ VIỆN
VÀ HÀM HỖ TRỢ - LIBRARY & HELPER
Hệ thống lớp thư viện và hàm hỗ trợ trong Hiphop giúp các lập trình viên thao tác trong việc xây dựng ứng dụng của mình nhanh và hiệu quả hơn. Chương này giới thiệu đầy đủ các lớp thư viện (library) và các hàm trợ giúp trong Hiphop cũng như cách thức sử dụng chúng trong quá trình xây dựng ứng dụng.
4.1 Các lớp thư viện
4.1.1. Email library
Là công cụ mạnh mẽ giúp đơn giản hóa việc gửi email. Lớp thư viện Email hỗ trợ các tính năng sau đây:
Hỗ trợ đa giao thức: Mail, Sendmail và SMTP
CC and BCCs
Email dạng chữ (text) hoặc HTML
Hỗ trợ gửi file đính kèm
Sau đây là ví dụ minh họa việc gửi mail trong Hiphop dễ dàng thế nào.
$this->load->library('email');
//Cấu hình việc gửi email
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$this->email->initialize($config);
$this->email->setFrom('your@example.com', 'Your Name');
$this->email->setTo('someone@example.com');
$this->email->setCC('cc@example-mail-box.com');
$this->email->setBCC('bcc@ example-mail-box.com');
$this->email->setSubject('Testing email class');
$this->email->setMessage('Testing the email class.');
$this->email->send();
Với trường hợp gửi tới nhiều địa chỉ mail, chỉ cần làm như đoạn code sau:
$list = array('one@example.com', 'two@example.com', 'three@example.com');$this->email->to($list);
Hàm $this->email->attach() giúp gửi file đính kèm. Đặt đường dẫn file đính kèm trong tham số đầu tiên của hàm:
$this->email->attach('/path/to/photo1.jpg');$this->email->attach('/path/to/photo2.jpg');$this->email->attach('/path/to/photo3.jpg');$this->email->send();
4.1.2. Database library
Trước khi làm việc với thư viện này, cần thiết đặt các thông số kết nối như username, password, tên database trong file system/config/database.php theo mẫu sau:
$currentConnection = 'default';
$db['default']['hostname'] = "localhost";$db['default']['username'] = "root";$db['default']['password'] = "";$db['default']['database'] = "database_name_1";$db['default']['dbdriver'] = "mysql";
Lý do mảng $db phải ở dạng hai chiều có liên quan tới tính năng hỗ trợ nhiều kết nối tới nhiều cơ sở dữ liệu của Hiphop framework. Ví dụ, trong ứng dụng của bạn cần tới một kết nối tới database khác, chỉ cần thêm thiết đặt sau vào file database.php bên trên:
$db['test']['hostname'] = "localhost";$db['test']['username'] = "root";$db['test']['password'] = "";$db['test']['database'] = "database_name_2";$db['test']['dbdriver'] = "mysql";
“Test” là một tên ngẫu nhiên ta đặt cho kết nối thứ hai. Tương tự chúng ta có thể định nghĩa các kết nối khác một cách dễ dàng.
Theo mặc định, sau khi câu lệnh:
$this->load->database();
được thưc hiện, kết nối default sẽ mặc định được nạp vào controller (cụ thể là biến $this->db trong Controller).
Sau khi nạp một kết nối database, chúng ta có thể dùng được các phương thức trong lớp Database để tương tác với database qua kết nối này.
escape()
Tự động thêm ký tự nháy đơn (‘) cho tham số trong hàm. Hàm này đặc biệt hữu ích trong việc viết các câu truy vấn an toàn nhằm tránh l
Các file đính kèm theo tài liệu này:
- Xây dựng nền tảng hỗ trợ lập trình web dựa trên mô hình mvc.doc