Your SlideShare is downloading. ×
Hỏi tình hình bk tiny   bktiny-hdsd
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

255
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
255
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. CUỘC THI MÙA HÈ SÁNG TẠO 2011 TÀI LIỆU HƯỚNG DẪN SỬ DỤNG BKTINY FRAMEWORKMÃ 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 Framework1.Giới thiệu2.Yêu cầu hệ thống3.Kiến trúc BKTiny framework4.Đặc tả chi tiết các lớp
  • 3. 1.Giới thiệuBKTiny Framework là một PHP Framework được tổ chức theo mô hìnhMVC.Sử dụng BKTiny Framework giúp lập trình dự án PHP nhanh hơn, codetrong sáng hơn, dễ quản lý, chỉnh sửa , nâng cấp2.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_mysql3.Kiến trúc BkTiny Framework3.1 Các đặc điểm của BkTiny FrameworkBKTiny 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ụcBKTiny 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 ở đúngvị 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ụcapplication.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…Fileconfig.php chứa một mảng config – các thông số cấu hình của website.Có thêmthê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ỗimodule luôn gồm 3 thư mục controlles, models, views3.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ụ : indexAction3.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.php3.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ớp4.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 registryVí 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_HttpChứ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/gt24.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à IndexController4.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à indexAction4.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à defaultAction4.5. Class Core_TemplateChức năng: gọi view, layout,widget tương ứng, lưu trữ và truyền giá trị từcontroller sang view4.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/action4.5.3 show()Trả về toàn bộ nội dung gửi về web client4.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->title4.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 xongLư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 quantrọ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/helpers4.8. Các thư viện mở rộngTất cả các thư viện mở rộng đều là các class được lưu trong library.Cũng giốngnhư trong core tên của các class đều được đặt theo đường dẫn thư mục.Chẳnghạ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.