Nội dung được tác giả trình bày cô động, dễ hiểu kèm theo các bước hướng dẫn thực hành chi tiết theo nguyên tắc quan tâm đến kết quả đầu ra, khả năng tự học và kỹ năng cần thiết để HSSV [r]
Trang 1UBND TỈNH BÀ RỊA – VŨNG TÀU
TRƯỜNG CAO ĐẲNG KỸ THUẬT CÔNG NGHỆ
GIÁO TRÌNH
MÔ ĐUN LẬP TRÌNH WEB PHP NÂNG CAO NGHỀ: CÔNG NGHỆ THÔNG TIN TRÌNH ĐỘ: CAO ĐẲNG
(Ban hành kèm theo Quyết định số: ……/QĐ-CĐKTCN, ngày … tháng … năm 20…… của Hiệu trưởng Trường Cao đẳng Kỹ thuật Công nghệ BR-VT)
BÀ RỊA – VŨNG TÀU, NĂM 2020
Trang 2TUYÊN BỐ BẢN QUYỀN
Nhằm đáp ứng nhu cầu học tập và nghiên cứu cho giảng viên và sinh viênnghề Công nghệ Thông tin trong trường Cao đẳng Kỹ thuật Công nghệ Bà Rịa –Vũng Tàu, chúng tôi đã thực hiện biên soạn tài liệu Lập trình web PHP nângcao
Tài liệu được biên soạn thuộc loại giáo trình phục vụ giảng dạy và học tập,lưu hành nội bộ trong Nhà trường nên các nguồn thông tin có thể được phépdùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo.Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinhdoanh thiếu lành mạnh sẽ bị nghiêm cấm
Trang 3LỜI GIỚI THIỆU
Giáo trình “Lập trình web PHP nâng cao” được biên soạn dựa trên khungchương trình đào tạo Cao đẳng nghề Công nghệ Thông tin đã được Trường Caođẳng Kỹ thuật Công nghê Bà Rịa – Vũng Tàu phê duyệt
Tác giả đã nghiên cứu một số tài liệu, công nghệ hiện đại kết hợp với kinhnghiệm làm việc thực tế để viết nên giáo trình này Nội dung được tác giả trìnhbày cô động, dễ hiểu kèm theo các bước hướng dẫn thực hành chi tiết theonguyên tắc quan tâm đến kết quả đầu ra, khả năng tự học và kỹ năng cần thiết đểHSSV có thể hoàn thành ứng dụng web quảng cáo sản phẩm, thương mại điện
tử, … bằng ngôn ngữ PHP, một trong những ngôn ngữ lập trình ứng dụng webthông dụng hiện nay, đáp ứng nhu cầu thực tế của doanh nghiệp
Nội dung giáo trình được chia thành 07 bài, trong đó:
Bài 7: Hoàn chỉnh Controller/View
Trong quá trình biên soạn, chắc chắn giáo trình còn nhiều thiếu sót Tác giảrất mong nhận được ý kiến đóng góp của quý thầy/cô và các em học sinh, sinhviên để tiếp tục hoàn thiện hơn
Xin chân thành cảm ơn quý đồng nghiệp, bạn bè đã có những ý kiến đónggóp trong quá trình biên soạn giáo trình này
Bà Rịa – Vũng Tàu, ngày …… tháng …… năm ………
Tham gia biên soạn
1 Phan Hữu Phước – Chủ biên
Trang 4MỤC LỤC
LỜI GIỚI THIỆU 1
MỤC LỤC 3
BÀI 1: TỔNG QUAN 9
1 Mô hình MVC 9
2 CodeIgniter 10
3 Dòng xử lý của ứng dụng web CodeIgniter 10
CÂU HỎI, BÀI TẬP 11
BÀI 2: TẠO ỨNG DỤNG CODEIGNITER ĐẦU TIÊN 13
1 Tạo cơ sở dữ liệu 13
2 Tải mã nguồn và tạo site 15
3 Cấu trúc thư mục 16
CÂU HỎI, BÀI TẬP 16
BÀI 3: ROUTING 17
1 Cấu hình site 17
1.1 Nhập thông tin cấu hình chung 17
1.2 Đọc thông tin cấu hình 18
1.3 Tạo thông tin cấu hình riêng 18
2 Cấu trúc địa chỉ 19
3 Cấu hình route mặc định 20
CÂU HỎI, BÀI TẬP 21
GỢI Ý, ĐÁP ÁN 22
BÀI 4: CONTROLLER 23
1 Khái niệm 23
2 Tạo controller 23
3 Tạo hàm hành động 23
4 Tổ chức controller trong thư mục 24
CÂU HỎI, BÀI TẬP 25
Trang 5GỢI Ý, ĐÁP ÁN 25
BÀI 5: VIEW 27
1 Khái niệm 27
2 Tạo view 27
2.1 Tạo view dùng chung 28
2.2 Tạo view nội dung cho các trang 29
3 Tải view 29
4 Truyền dữ liệu đến view 29
5 Form trên view 30
CÂU HỎI, BÀI TẬP 31
BÀI 6: MODEL 33
1 Khái niệm 33
2 Tạo model 33
3 Định nghĩa các hàm trong model 34
3.1 Cập nhật hàm GetList (Đọc nhiều dòng dữ liệu) 34
3.2 Cập nhật hàm GetEntry (Đọc một dòng dữ liệu theo khóa) 34
3.3 Cập nhật hàm Insert (Thêm một dòng dữ liệu) 35
3.4 Cập nhật hàm Update (Cập nhật một dòng dữ liệu) 35
3.5 Cập nhật hàm Delete (Xóa một dòng dữ liệu) 35
4 Truy xuất CSDL thông qua model trong controller 35
4.1 Thêm hàm khởi tạo 35
4.2 Cập nhật hàm index 36
4.3 Cập nhật tập tin application/views/tacgia/index.php 36
CÂU HỎI, BÀI TẬP 36
GỢI Ý, ĐÁP ÁN 36
BÀI 7: HOÀN CHỈNH CONTROLLER/VIEW 37
1 Thêm dữ liệu 37
2 Cập nhật dữ liệu 37
Trang 63 Xóa dữ liệu 39 CÂU HỎI, BÀI TẬP 39 TÀI LIỆU THAM KHẢO 41
Trang 7GIÁO TRÌNH MÔ ĐUN Tên mô đun: Lập trình web PHP nâng cao
Mã mô đun: MĐ29
Vị trí, tính chất, ý nghĩa và vai trò của mô đun:
Sau khi học xong Lập trình web PHP & MySQL
Cung cấp cho người học kiến thức và kỹ năng để có thể thiết kế, xây dựng
và phát triển ứng dụng web theo mô hình MVC dựa trên CodeIgniterFramework
Mục tiêu của mô đun:
Về kiến thức:
+ Trình bày được MVC
+ Trình bày quá trình route và xử lý yêu cầu trong site CodeIgniter
+ Biết các bước tạo website PHP sử dụng framework CodeIgniter
+ Trình bày quy trình xây dựng Model, Controller
+ Trình bày quy trình truyền dữ liệu Model, Controller, View
+ Biết quy trình truy xuất CSDL
- Về kỹ năng:
+ Tải và tạo site sử dụng framework CodeIgniter
+ Tạo Route
+ Tạo Model, Cotroller
+ Định nghĩa các thuộc tính, phương thức cho Model
+ Định nghĩa các hàm cho Controller
+ Tạo View cho các hàm trong Controller
+ Xây dựng các hàm truy xuất CSDL trong Model, Controller
+ Tạo các View hiển thị dữ liệu
Trang 8+ Đặt tên tập tin, thư mục đúng quy định
+ Tự tìm hiểu tài liệu nâng cao kiến thức và kỹ năng xây dựng ứng dụngweb theo mô hình MVC
Nội dung của mô đun:
Trang 9BÀI 1: TỔNG QUAN
Mã bài: 22.1
Giới thiệu:
MVC là mô hình ứng dụng web phổ biến hiện nay Có nhiều framework
mã nguồn mở dùng ngôn ngữ PHP với mô hình MVC, trong số đó có frameworkCodeIgniter
Mục tiêu:
Trình bày các thành phần trong mô hình MVC
Biết lợi ích của framework CodeIgniter
Trình bày dòng xử lý của CodeIgniter sau khi tiếp nhận yêu cầu
Tự tìm hiểu các thông tin khác trên trang CodeIgniter
Đảm bảo an toàn cho người và thiết bị
Trang 10Hình 1.2 Hoạt động của mô hình MVC
Tạo URL rõ ràng theo SEO
Không yêu cầu engine
Có đầy đủ thư viện hỗ trợ việc truy xuất CSDL, xử lý gửi/nhận email, hìnhảnh, upload tập tin
Hỗ trợ xử lý phân trang
(Xem thêm: http://codeigniter.com/userguide3/overview/features.html)
3 Dòng xử lý của ứng dụng web CodeIgniter
Tập tin index.php khởi tạo các nguồn tài nguyên cần thiết
Route phân tích yêu cầu để quyết định công việc cần xử lý
Nếu tập tin cache đã có, sẽ được gửi trực tiếp đến trình duyệt
Trang 11 An toàn: trước khi controller được nạp, yêu cầu HTTP và dữ liệu nào đượcsubmit đều được lọc.
Controller nạp model, thư viện, helper, và các nguồn tài nguyên cần thiếtkhác để xử lý đáp ứng cho yêu cầu cụ thể
Cuối cùng, view được diễn giải sau đó gửi cho trình duyệt Nếu cache đượcbật thì view được lưu vào cache trước rồi mới giải quyết yêu cầu
CÂU HỎI, BÀI TẬP
1.1 Tên và chức năng của các thành phần trong mô hình MVC?
1.2 Dòng xử lý của ứng dụng web CodeIgniter?
Trang 12BÀI 2: TẠO ỨNG DỤNG CODEIGNITER ĐẦU TIÊN
Biết địa chỉ để tải framework CodeIgniter
Biết cú pháp URI trong website được viết theo mô hình MVC
Tạo site bằng CodeIgniter framework
Lưu site vào đúng đường dẫn
Nội dung chính:
1 Tạo cơ sở dữ liệu
Tạo và nhập dữ liệu cho CSDL bookstore theo yêu cầu dưới
Table chude
Table nxb
Table tacgia
Table sach
Trang 13 Table thamgia
Quan hệ
Dữ liệu
Trang 142 Tải mã nguồn và tạo site
Bước 1: truy cập trang web http://codeigniter.com
Bước 2: click chuột lên biểu tượng Download để tải mã nguồn
Bước 3: giải nén tập tin đã tải
Bước 4: copy các tập tin và thư mục bên trong vào C:\xampp\htdocs\IgniterSite1
(C:\xampp là thư mục củ gói XAMPP đã được cài đặt trên máy tính)
Hình 2.1 Mã nguồn CodeIgniter
Bước 5: Tạo IgniterSite1 đến C:\xampp\htdocs\IgniterSite1 trong DreamWeaver
Trang 154 Cấu trúc thư mục
Hình 2.2 Cấu trúc tập tin, thư mục bên trong site CodeIgniter
config: chứa các tập tin cấu hình
controllers: chứa các tập tin định nghĩa controller
models: chứa các tập tin định nghĩa lớp đối tượng model
views: chứa các tập tin giao diện (view)
CÂU HỎI, BÀI TẬP
2.1 Tải mã nguồn và tạo site tracuudiem
2.2 Tên thư mục chứa các tập tin cấu hình?
Trang 16 Biết quá trình xử lý yêu cầu của site
Biết chức năng của route trong site
Cấu hình cho site CodeIgniter framework
Tạo một trang đơn giản
Đặt tên tập tin, thư mục đúng quy tắc
Nội dung chính:
1 Cấu hình site
1.1 Nhập thông tin cấu hình chung
Bước 1: mở tập tin application/config/config.php và cập nhật cho 2 dòng lệnh
Bước 2: mở tập tin application/config/database.php và cập nhật thông tin truy
cập CSDL MySQL
Trang 171.2 Đọc thông tin cấu hình
Cú pháp
Ví dụ: Mở tập tin application/views/welcome_message.php và cập nhật như sau:
Truy cập lại trang trên trình duyệt để xem kết quả
1.3 Tạo thông tin cấu hình riêng
B1: Tạo tập tin cấu hình application/config/customconfig.php và nhập nội dung
như sau:
B2: Tải tập tin cấu hình riêng Mở tập tin application/controllers/Welcome.php
và cập nhật cho hàm index
Trang 18B3: Đọc thông tin cấu hình riêng
Mở tập tin application/views/welcome_message.php và cập nhật nội dung nhưsau:
5 Cấu trúc địa chỉ
Địa chỉ site theo mô hình MVC có cấu trúc tổng quát như sau:
Nếu không có method thì hàm hành động index sẽ được gọi
controller: lớp đối tượng nhận xử lý yêu cầu
method: hàm hành động được gọi của controller
arguments: tham số truyền vào hàm hành động
Trang 19Mở tập tin application/config/routes.php Xóa hết tất cả và cập nhật lại nội
dung như sau:
Khi địa chỉ truy cập được tìm thấy trong tập tin routes.php thì sẽ được xử lý theoquy tắc bên trong routes.php Ngược lại, yêu cầu sẽ được xử lý theo cấu trúctổng quát (đã trình bày trong Mục 3.1)
Với định nghĩa route như trên, các controller, method và arguments sẽ đượctruyền khi truy cập địa chỉ tương ứng như sau:
Trang 20Như phân tích với các ví dụ trên, ứng dụng cần phải có controller home với cáchàm index và view.
Tạo tập tin application/controllers/Home.php với nội dung bên dưới.
Đã tạo xong controller home với các method (hàm hành động) index và view.Truy cập trang theo địa chỉ của 3 ví dụ trên để xem kết quả
CÂU HỎI, BÀI TẬP
Cập nhật tập tin application/config/routes.php và tạo các controller để hiển thị
kết quả với địa chỉ truy cập tương ứng như sau:
Trang 22 Trình bày khái niệm và công dụng của Controller
Tạo được lớp đối tượng kế thừa controller
Tạo các hàm hành động trong controller
Đặt tên tập tin đúng quy định
Nội dung chính:
1 Khái niệm
Controller là một lớp đối tượng được dẫn xuất từ CI_Controller, có chức năng
tiếp nhận và xử lý yêu cầu được route chuyển đến Bên trong controller chứa cáchàm (hành động) xử lý theo từng yêu cầu cụ thể
7 Tạo controller
Mỗi controller được định nghĩa trong một tập tin đặt trong thư mục application/ controllers Mỗi controller là một lớp đối tượng được dẫn suất từ CI_Controller.
Cú pháp
<?php
defined(‘BASEPATH’) or exit (‘Truy cap trai phep’);
class <TênController> extends CI_Controller{
Trang 23Truy cập theo địa chỉ http://localhost/ignitersite1/index.php/tacgia để xem kếtquả
Tạo thêm các hàm hành động cho controller TacGia như sau:
9 Tổ chức controller trong thư mục
Với các ứng dụng web lớn, CodeIgniter cho phép nhà phát triển tách/tổ chức cáccontroller trong thư mục con Ví dụ: các trang/chức năng quản lý nội dung đượctruy cập theo địa chỉ http://localhost/codeignitersite1/quantri
Bước 1: Tạo thư mục application/controllers/quantri
Trang 24Bước 2: Tạo các controller trong thư mục application/controllers/quantri
CÂU HỎI, BÀI TẬP
4.1 Tạo các controller Chude, Nxb, Sach với các hàm hành động bên trong,tương tự controller Tacgia đã xây dựng ở trên
GỢI Ý, ĐÁP ÁN
Tham khảo tập tin controller/Tacgia.php
Trang 25 Biết khái niệm và công dụng của view
Thiết kế được view và tải view trong các hàm controller
Truyền dữ liệu từ controller đến view
Truyền dữ liệu từ view đến controller thông qua form
Xử lý dữ liệu nhận được từ form
Đảm bảo an toàn cho người và thiết bị
Trang 26Trong một website có nhiều trang Hầu như các trang đề có bố cục, chức nănggiống nhau, chỉ khác nhau về nội dung được hiển thị trên vùng rộng lớn nhất.Xét giao diện trên, tài liệu HTML đơn giản có thể như sau:
2.1 Tạo view dùng chung
Các trang đều có bố cục và nội dung giống nhau trong hai thành phần (đã đượcđánh dấu trong các khung chữ nhật) Chúng ta lần lượt tạo các view tương ứng.Bước 1: Tạo thư mục application/views/shared
Bước 2: Tạo tập tin application/views/shared/p1.php
Bước 3: Tạo tập tin application/views/shared/p2.php
Trang 272.2 Tạo view nội dung cho các trang
Quy tắc chung: Với mỗi controller, chúng ta sẽ tạo một thư mục đặt bên trong
application/views Tiếp theo, chúng ta sẽ tạo các view đặt bên trong thư mục vừ tạo Xét controller TacGia trong mục 3 ở bài trước, chúng ta có các hàm index, add và edit lần lượt là các trang Danh sách tác giả, Thêm tác giả và Sửa thông
tin tác giả
Bước 1: Tạo thư mục application/views/tacgia
Bước 2: Tạo tập tin application/views/tacgia/index.php để hiển thị nội dung cho
Tương tự như vậy, cập nhật các hàm _new và edit
Kiểm tra kết quả các trang theo địa chỉ lần lượt
http://localhost/ignitersite1/index.php/tacgia
http://localhost/ignitersite1/index.php/tacgia/add
http://localhost/ignitersite1/index.php/tacgia/edit/1
12 Truyền dữ liệu đến view
Trong ví dụ bên dưới, chúng ta sẽ truyền danh sách tác giả từ hàm index đếnview application/views/tacgia/index.php Hiện tại, chúng ta chưa truy cập đếnCSDL nên sẽ chúng ta sẽ tạo dữ liệu thử dưới dạng mảng
Bước 1: Truyền dữ liệu đến view Để truyền dữ liệu vào cho view, chúng ta chỉcần đặt dữ liệu vào tham số thứ hai của hàm load->view
Trang 28Bước 2: Xử lý dữ liệu nhận được trên view.
Cập nhật nội dung tập tin application/views/tacgia/index.php
http://localhost/ignitersite1/index.php/tacgia
13 Form trên view
Bước 1: Cập nhật hàm add trong controller TacGia
Bước 2: Tạo tập tin application/views/tacgia/add.php
Trang 29form_open(‘tacgia/store’): tạo thẻ form có thuộc tính method= “post”
và action= “/index.php/tacgia/store” (dữ liệu sẽ được chuyển đến hàm store củacontroller TacGia)
Bước 3: Cập nhật hàm store trong controller TacGia
Kiểm tra kết quả: mở trang http://localhost/ignitersite1/index.php/tacgia/add.Không nhập tên, click chuột lên nút Submit Lỗi
Tiếp tục mở lại trang http://localhost/ignitersite1/index.php/tacgia/add Nhậptên, click chuột lên nút Submit Thành công
CÂU HỎI, BÀI TẬP
5.1 Tạo/cập nhật các controller và view tương ứng để có các trang hiển thịDanh sách chủ để, Danh sách NXB (Tạo dữ liệu thử dưới dạng mảng)
5.2 Tạo/cập nhật các controller và view tương ứng để có các trang chứa formcho phép nhập mới thông tin Chủ đề, NXB, Tác giả (chưa cần ghi vào CSDL)
Trang 30 Tải model trong controller
Truyền dữ liệu từ model đến view
Viết các hàm truy xuất CSDL trong model
Tạo tập tin application/models/tacgia_model.php để định nghĩa một lớp đối
tượng tacgia_model là một model, thực hiện việc đọc/thêm/xóa/sửa dữ liệu trêntable TacGia
Trang 3114 Định nghĩa các hàm trong model
3.1 Cập nhật hàm GetList (Đọc nhiều dòng dữ liệu)
3.2 Cập nhật hàm GetEntry (Đọc một dòng dữ liệu theo khóa)
Trang 323.3 Cập nhật hàm Insert (Thêm một dòng dữ liệu)
3.4 Cập nhật hàm Update (Cập nhật một dòng dữ liệu)
3.5 Cập nhật hàm Delete (Xóa một dòng dữ liệu)
15 Truy xuất CSDL thông qua model trong controller
Cập nhật tập tin application/controllers/tacgia.php
4.1 Thêm hàm khởi tạo
load->helper: tải thư viện chứa các hàm hỗ trợ đọc nhanh các thông tin url,
uri, … Có thể mở tập tin system/helpers/url_helper.php xem
các hàm bên trong
load->database: tải thư viện hỗ trợ truy xuất CSDL
load->model: tải lớp đối tượng model
Trang 334.2 Cập nhật hàm index
4.3 Cập nhật tập tin application/views/tacgia/index.php
CÂU HỎI, BÀI TẬP
6.1 Tạo các model còn lại tương ứng với các table trong CSDL bookstore,tương tự tacgia_model đã thực hiện trong bài
GỢI Ý, ĐÁP ÁN
Tham khảo tập tin models/tacgia_model.php