1. CUỘC THI MÙA HÈ SÁNG TẠO 2011
TÀI LIỆU HƯỚNG DẪN SỬ DỤNG BKTINY
FRAMEWORK
MÃ SỐ MHST11-15: XÂY DỰNG EXTENSION-
PORTAL CHO NIMBUS.
Nhóm sinh viên: Lê Quang Hiếu
Lưu Thị Thùy Nhung
Phạm Văn Tân
Mentor: Nguyễn Hữu Đức
Hà Nội, tháng 9 năm 2011
2. Hướng dẫn sử dụng BKTiny Framework
1.Giới thiệu
2.Yêu cầu hệ thống
3.Kiến trúc BKTiny framework
4.Đặc tả chi tiết các lớp
3. 1.Giới thiệu
BKTiny Framework là một PHP Framework được tổ chức theo mô hình
MVC.Sử dụng BKTiny Framework giúp lập trình dự án PHP nhanh hơn, code
trong sáng hơn, dễ quản lý, chỉnh sửa , nâng cấp
2.Yêu cầu hệ thống
PHP phiên bản 5.3.0 trở lên
MySQL 5.0 trở lên
Apache hỗ trợ mod_rewrite và PDO_mysql
3.Kiến trúc BkTiny Framework
3.1 Các đặc điểm của BkTiny Framework
BKTiny Framework có các đặc điểm chính sau:
- Là một PHP framework : BKTiny Framework giúp lập trình dự án PHP
nhanh hơn, code trong sáng hơn, dễ quản lý, chỉnh sửa , nâng cấp
- Sử dụng mô hình MVC: mô hình MVC giúp tách riêng các phần xử lý
của website
- Rất gọn nhẹ: Phần lõi của framework rất nhỏ. Chỉ cần vài lớp trong
public/core cũng có thể phát triển một dự án website theo đúng mô hình
MVC.
- Có tốc độ rất nhanh
- Sử dụng URL thân thiện: ví dụ example.com/news/article/id/345 tức là
controller: news, action: article, tham số id=345
- Có khả năng mở rộng lớn. BKTiny Framework cho phép mở rộng thêm
các thư viện, các helper tùy theo mục đích sử dụng.
- Hoàn toàn là nguồn mở, miễn phí.
3.2 Sơ đồ luồng hoạt động
4. 1. Tất cả các truy vấn đều thông qua trang index.php
2. Dựa vào đường link URL truy vấn , sẽ định tuyến tới controller và gọi
action tương ứng
3. Controller có thể load các model, các thư viện…sau đó kết quả trả về cho
view
4. View trả về kết quả cho trình duyệt, view có thể sử dụng layout và helper.
3.2 Cấu trúc tổ chức cây thư mục
BKTiny Framework có cấu trúc cây thư mục rõ ràng và mạch lạc.Các dữ liệu,
controller, model , view … đều phải tuân thủ theo quy tắc đặt tên và đặt ở đúng
vị trí. Việc tuân thủ theo các quy tắc đó giúp cho hệ thống tự autoload các thư
viện cần thiết và mã nguồn trở lên trong sáng hơn, dễ phát hiện ra lỗi và sửa lỗi.
Trong thư mục gốc luôn gồm 3 thư mục application, library, public và 2 file
.htaccess, index.php
5. File .htaccess có nhiệm vụ rewrite mọi truy vấn đều phải qua trang index.php.
Thư mục library chưa mã nguồn của framework. Thư mục public chứa các file
ảnh, css, javascript …Mọi mã nguồn phát triển website được nằm trong thư mục
application.
Trong thư mục configs chứa 2 file common.php và config.php .Trong đó,
common.php chứa các hàm toàn cục như :autoload, loadHelper…File
config.php chứa một mảng config – các thông số cấu hình của website.Có thêm
thêm các dữ liệu vào mảng config này tùy theo mục đích sử dụng.
Thư mục modules chứa các module : trong đó module default là mặc định.Mỗi
module luôn gồm 3 thư mục controlles, models, views
3.2.1. Controller
- Các file controller được đặt trong thư mục controllers.
- Tên file controller được đặt theo quy tắc sau:
NamecontrollerController.php. Trong đó: Namecontroller - chữ cái đầu
viết hoa còn các chữ sau viết thường
- Tên class giống như tên file controller và kế thừa từ lớp Core_Controller
Ví dụ: class IndexController extends Core_Controller
6. - Trong mỗi lớp Controller khi cần truyền giá trị sang view sử dụng cách
gán như sau: $this->_view->tenbien = “giatri”. Khi đó ở view khi cần sử
dụng chỉ cần gọi $this->tenbien
- $this-> redirect($path) : redirect đường dẫn tới trang khác.
- Sử dụng $this-> _baseUrl để lấy baseUrl hiện tại.
3.2.2 Action
- Action là một phương thức trong controller.
- Tên action có cấu trúc tên là nameactionAction. Trong đó nameaction
luôn là chữ thường.
Ví dụ : indexAction
3.2.3 View
- View có cấu trúc : views/scripts/namecontroller/nameaction.php. Đây
chính là khung nhìn đối với controller và action tương ứng
- Lưu ý tên controller là chữ thường , không có chữ Controller ở cuối và
tên action cũng là chữ thường , không có chữ Action ở cuối.
3.2.4 Model
- Model nằm trong thư mục models
- Tên file model luôn bắt đầu bằng chữ hoa, các chữ còn lại là chữ thường.
- Tên class của model luôn có dạng Namemodule_Model_Namemodel
- Namemodule: luôn bắt đầu bằng chữ hoa, các chữ còn lại là chữ
thường.Nếu là default module thì có thể bỏ qua.
- Nếu sử dụng liên quan tới CSDL thì kế thừa từ lớp Core_Database.Khi
đó sử dụng PDO : $this->_db.Chi tiết xem tại :
http://php.net/manual/en/book.pdo.php
3.3 Các chức năng hiện tại
- Hỗ trợ lập trình theo mô hình MVC
7. - Thao tác với cơ sở dữ liệu bằng PDO (chống SQL Injection)
- Hỗ trợ multi layout.Có thể dùng nhiều giao diện cho website
- Bảo mật và lọc dữ liệu đầu vào chống XSS
- Phân trang
- Gửi email (PHP mail, SMTP mail)
- Tích hợp CkEditor
- Tạo mã xác nhận (captcha)
4.Đặc tả chi tiết các lớp
4.1 Sơ đồ các lớp cơ bản của framework
8. 4.2 Quy tắc đặt tên
- Đặt tên thư mục , tên file php không phải là class luôn là chữ thường
- Đặt tên file php là class luôn bắt đầu bằng chữ hoa.Các chữ còn lại là chữ
thường , trừ trường hợp file là controller thì đặt tên như ví dụ
IndexController.
9. - Tên class luôn bắt đầu bằng chữ hoa.Nếu trong tên có kí tự ‘ _’ thì sau đó
cũng bắt đầu bằng chữ hoa
- Đặt tên phương thức trong một class luôn bắt đầu bằng chữ thường.
- Đặt tên các thuộc tính private hoặc protected luôn bắt đầu bằng ký tự ‘_’
4.3 Class Core_Registry
- Kế thừa từ lớp ArrayAccess
- Chức năng: lưu trữ mọi thuộc tính, giá trị, đối tượng…
- Không được khởi tạo bằng hàm tạo(__construct), không được sao chép
bằng hàm sao chép(__clone)
- Chỉ tạo ra một đối tượng duy nhất bằng phương thức gọi
Core_Registry::singleton()
- Truy cập các phần tử được lưu trữ như là mảng
- Mặc định các đối tượng của Core_Http, Core_Template , mảng config,
baseUrl đã được lưu trữ trong registry
Ví dụ : Lấy các giá trị lưu trong registry
$registry = Core_Registry::singleton();
$http = $registry[‘http’];
$template = $registry[‘template’];
$config = $registry[‘config’];
$baseUrl = $registry[‘baseUrl’];
4.4. Class Core_Http
Chức năng: Xử lý , phân tách chuỗi địa chỉ Url
Được gọi ra từ registry:
$registry = Core_Registry::singleton(); //đối tượng duy nhất của Core_Registry
$http = $registry[‘http’]; // đối tượng của Core_Http
10. Các phương thức chính:
4.4.1 getBaseUrl() : string
- Trả về đường dẫn từ thư mục gốc (webroot) tới thư mục chứa web
- Ví dụ với XAMPP nếu thư mục chứa web là htdocs/abc/fw thì có địa chỉ
truy cập là 127.0.0.1/abc/fw khi đó hàm getBaseUrl() sẽ trả về kết quả là
abc/fw
- Nếu website được upload trực tiếp vào webroot thì kết quả là một chuỗi
rỗng: ” ”
- Ví dụ : www.abc.com thì getBaseUrl() = “ ”
4.4.2 getRequestUri() : string
- Trả về phần đường dẫn còn lại sau phần baseUrl
- Ví dụ với địa chỉ
http://127.0.0.1/fw/tenmodule/tencontrolle/tenaction/thamso1/gt1/thamso
2/gt2
getBaseUrl(): fw
getRequestUri():tencontrolle/tenaction/thamso1/gt1/thamso2/gt2
4.4.3 getModule() : string
- Trả về tên module : giá trị tenmodule trên đường link URL
- Nếu không tồn tại, mặc định là giá trị được lưu trong
config[‘module’][‘default’]
4.4.4 getController() : string
- Trả về tên Controller : giá trị tencontroller trên đường link URL(viết hoa
chữ cái đầu) ghép với chuỗi “Controller”
- Mặc định là IndexController
4.4.5 getAction() : string
- Trả về tên Action: giá trị tenaction trên đường link URL ghép với chuỗi
“Action”
11. - Mặc định là indexAction
4.4.6 getArvs() : array
- Trả về một mảng chứa các tham số truyền trên URL
- Ví dụ với địa chỉ
- http://127.0.0.1/fw/tenmodule/tencontrolle/tenaction/thamso1/gt1/thamso
2/gt2 hàm getArvs() trả về mảng array( “thamso1” => “gt1”, “thamso2”
=>”gt2” )
4.4.7 getParam($nameParam , $defaultValue = null):giá trị của tham số
$nameParam
- Trả về giá trị của tham số $nameParam nếu không tồn tại trả về null
- Ví dụ : getParam(“thamso1”) = “gt1”
- Chú ý : cho dù đường link địa chỉ viết bằng chữ thường hay chữ hoa, web
browser luôn gửi đến web server đường link là chuỗi chữ thường.
- Để tránh xung đột không đặt tên controller , tên module ,tên action giống
nhau
- Ví dụ nếu có tên module là default thì không đặt controller là
DefaultController hoặc action là defaultAction
4.5. Class Core_Template
Chức năng: gọi view, layout,widget tương ứng, lưu trữ và truyền giá trị từ
controller sang view
4.5.1 loadWidget($fileName)
- Load widget có tên là $fileName trong thư mục views/wiggets/
- $fileName có thể là tên file hoặc đường dẫn đến file
Ví dụ:
loadWidget(“tenfile”)
loadWidget(“thumuc/tenfile”)
4.5.2 loadContent()
12. Tự động load nội dung ở trong views/scripts tương ứng với tên controller/action
4.5.3 show()
Trả về toàn bộ nội dung gửi về web client
4.5.4 layout($usingLayout, $nameLayout = null)
- Thiết lập trạng thái sử dụng layout
$usingLayout : boolean (true: sử dụng layout, false : không sử dụng
layout(chỉ sử dụng trong views/scripts)
$nameLayout: tên của layout nằm trong thư mục views/layouts.Chỉ
được thiết lập nếu $usingLayout = true.Nếu $usingLayout = true và
$nameLayout = null thì sẽ sử dụng tên mặc định trong
$config[‘layout’][‘nameLayout’]
4.5.5 Thuộc tính $this->_baseUrl
- Trả về baseUrl của website.Lưu ý so với hàm getBaseUrl() trong lớp
Core_Http thì $this->_baseUrl đã được thêm ký tự ‘/’ vào trước
Ví dụ : getBaseUrl() = “fw” $this->_baseUrl() = “/fw”
- Giá trị này thường được sử dụng trong các đường dẫn tuyệt đối tới file
ảnh, css, javascript
Ví dụ $this->_baseUrl.”/public/css/abc.css”
Chú ý:
layout, widget , view chính là một phần của lớp Core_Template nên có
thể sử dụng các phương thức, thuộc tính của lớp này bằng từ khóa $this-
>….. như bình thường
Khi sử dụng $this->tenbien = “giatri” với tenbien không phải là một
thuộc tính của lớp này(_registry, _vars, _usingLayout, _nameLayout,
_baseUrl) thì một biến có tên là tenbien sẽ tự động gán giá trị là
“giatri”.Điều này thường được dùng để truyền giá trị từ controller sang
view.
13. Với $this tham chiếu tới lớp controller, $this->view tham chiếu tới lớp
Core_Template .Khi đó ở trong layout, widget, view có thể sử dụng giá
trị $this->title
4.6 Class Core_Security
- Sử dụng để lọc xss tất cả các nội dung người dùng nhập vào.Tránh tấn
công xss (Cross-site Scripting)
Cross-site Scripting (XSS) là lỗ hổng cho phép hacker có thể chèn những
đoạn mã client-script (thường là Javascript hoặc HTML) vào trang web,
khi người dùng vào những trên web này, mã độc sẽ được thực thi trên
máy của người dùng.Khác với SQL Injection tấn công vào CSDL của
website, XSS tấn công trực tiếp vào người dùng. Lợi dụng lỗi XSS,
hacker có thể lừa đảo quản trị của website, ăn cắp cookie, chiếm
sesion… từ đó có thể đăng nhập chiếm quyền điều khiển website.
- Sử dụng phương thức xss_clean($str) : $str1. Trong đó $str là chuỗi cần
lọc xss , $str1 là kết quả sau khi lọc xong
Lưu ý: Do hàm này có chi phí thực hiện lớn, nên chỉ trong các trường hợp quan
trọng mới sử dụng.Thông thường các phần dữ liệu do admin nhập thì bỏ qua,
chỉ sử dụng lọc trong các trường hợp người dùng nhập như phần đăng ký,
search, phản hồi …
4.7 Helpers
- Helpers là các hàm (function) được sử dụng trong controller hoặc view,
layout,widget .Đây không phải là lớp (class) mà chỉ là hàm (function) –
khác với mọi phần còn lại của framework.
- Helpers không tự load mà phải gọi hàm loadHelper khi cần sử dụng.Các
file helper sẽ nằm trong thư mục library/helpers
4.8. Các thư viện mở rộng
Tất cả các thư viện mở rộng đều là các class được lưu trong library.Cũng giống
như trong core tên của các class đều được đặt theo đường dẫn thư mục.Chẳng
hạn file Ghk.php nằm trong thư mục library/abc/def thì tên lớp của nó phải là
Abc_Def_Ghk. Tất cả các class này đều được autoload.