13
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

Hỏi tình hình bk tiny bktiny-hdsd

Embed Size (px)

Citation preview

Page 1: Hỏi tình hình bk tiny   bktiny-hdsd

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

Page 2: Hỏi tình hình bk tiny   bktiny-hdsd

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

Page 3: Hỏi tình hình bk tiny   bktiny-hdsd

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

Page 4: Hỏi tình hình bk tiny   bktiny-hdsd

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

Page 5: Hỏi tình hình bk tiny   bktiny-hdsd

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

Page 6: Hỏi tình hình bk tiny   bktiny-hdsd

- 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

Page 7: Hỏi tình hình bk tiny   bktiny-hdsd

- 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

Page 8: Hỏi tình hình bk tiny   bktiny-hdsd

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.

Page 9: Hỏi tình hình bk tiny   bktiny-hdsd

- 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

Page 10: Hỏi tình hình bk tiny   bktiny-hdsd

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”

Page 11: Hỏi tình hình bk tiny   bktiny-hdsd

- 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()

Page 12: Hỏi tình hình bk tiny   bktiny-hdsd

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.

Page 13: Hỏi tình hình bk tiny   bktiny-hdsd

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.