+ Tạo csdl với tên: test_cake, mở file app/config/database.php, điền như sau: var $default = array 1.5 Các nguyên t ắc cơ bản của CakePHP CakePHP cung cấp một nền tảng mạnh mẽ cho ứng d
Trang 1Để hoàn thành khóa luận này, chúng em xin tỏ lòng biết ơn sâu sắc đến
Thầy Lê Mậu Long, đã tận tình hướng dẫn trong suốt quá trình viết khóa luận tốt nghiệp
Chúng em chân thành cảm ơn quý Thầy, Cô trong khoa Công Nghệ Thông Tin, Trường Đại Học Tôn Đức Thắng, đặc biệt là những thầy cô đã tận tình dạy bảo cho tôi suốt thời gian học tập tại trường Với vốn kiến thức được tiếp thu trong quá trình học không chỉ là nền tảng cho quá trình nghiên cứu khóa luận mà còn là hành trang quý báu để chúng em bước vào đời một cách vững chắc và tự tin
Cuối cùng chúng em kính chúc quý Thầy, Cô dồi dào sức khỏe và thành công trong sự nghiệp cao quý
Mặc dù chúng chúng em đã có nhiều cố gắng hoàn thiện luận văn bằng tất cả
sự nhiệt tình và năng lực của mình, tuy nhiên không thể tránh khỏi những thiếu sót,
rất mong nhận được sự góp ý quí báu của quí thầy cô và các bạn
Chân thành cảm ơn!
SVTH: Huỳnh Nguyễn Duy, Nguyễn Thanh Hoàng
Trang 2NH ẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Trang 3NH ẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Trang 4Lời mở đầu _ Trang 10
Chương 1: Tìm hiểu CakePHP framework Trang 11
1.1 Giới thiệu _ Trang 11 1.2 Tính năng của CakePHP Trang 11 1.3 Mô hình MVC trong CakePHP Trang 12 1.4 Cài đặt Trang 14 1.4.1 Cài đặt _ Trang 14 1.5 Các nguyên tắc cơ bản của CakePHP _ Trang 16 1.5.1 Cấu trúc của CakePHP Trang 16 1.5.2 Mở rộng _ Trang 18 1.6 Yêu cầu điển hình của CakePHP _ Trang 19 1.7 Cấu trúc thư mục của CakePHP Trang 20 1.7.1 Thư mục APP _ Trang 21 1.8 Các qui ước của CakePHP Trang 22 1.8.1 Các qui ước về file và tên lớp _ Trang 22 1.8.2 Qui ước về tên model và tên bảng csdl Trang 23 1.8.3 Qui ước về controller _ Trang 24 1.8.4 Qui ước về View _ Trang 24 1.9 Các thành phần chính của CakePHP Trang 25 1.9.1 Model _ Trang 25 1.9.2 View Trang 33
Trang 51.9.3 Controler _ Trang 45 Chương 2: Phân tích thiết kế hệ thống Trang 57 2.1 Tổng quan Trang 57 2.1.1 Mục đích của hệ thống _ Trang 57 2.1.2 Các chức năng chính của hệ thống Trang 57 2.1.3 Yêu cầu hệ thống _ Trang 57 2.2 Lược đồ Usecase _ Trang 59 2.3 Đặc tả Usecase _ Trang 59
2.3.1 Đăng ký thành viên Trang 59 2.3.2 Tìm kiếm nhà đất _ Trang 60 2.3.3 Xem thông tin nhà đất Trang 60 2.3.4 Gửi bài viết, rao bán, mua cho thuê, thuê nhà đất Trang 61 2.3.5 Đăng ký bài viết(Đăng ký tin giao dịch) Trang 62 2.3.6 Đăng nhập _ Trang 63 2.3.7 Quản lý thông tin cá nhân _ Trang 63 2.3.8 Quản lý bài viết _ Trang 63 2.3.9 Xem thống kê nhà đất Trang 64 2.3.10 Quản lý thông tin người dùng, nhân viên điều hành Trang 64 2.3.11 Quản lý ảnh upload _ Trang 65 2.3.12 Quản lý bài viết khách đã đăng ký _ Trang 65 2.3.13 Quản lý danh sách khách hàng đã giao dịch Trang 66 2.3.14 Đăng thông báo, yêu cầu _ Trang 66 2.3.15 Xem các bài viết đã gửi, đăng ký Trang 66 2.3.16 Quản lý loại, vị trí, hướng của BĐS Trang 67 2.3.17 Quản lý loại tiền _ Trang 68 2.3.18 Quản lý danh sách tỉnh thành, quận huyện _ Trang 68 2.3.19 Quản ký loại tin tức, tin tức Trang 68 2.3.20 Quản lý phân quyền Trang 68 2.3.21 Quản lý danh sách bài viết hết hạn _ Trang 69 2.3.22 Tìm kiếm để quản lý _ Trang 69 Chương 3: Lớp và đặc tả sơ đồ lớp Trang 70 3.1 Sơ đồ quan hệ Trang 70 3.2 Mô tả chi tiết các lớp đối tượng _ Trang 71 3.2.1 Tiện nghi của BĐS _ Trang 71 3.2.2 Người mua BĐS _ Trang 72 3.2.3 Loại BĐS Trang 73 3.2.4 Loại tiền _ Trang 73 3.2.5 Đơn vị _ Trang 74
Trang 63.2.6 Vị trí BĐS _ Trang 75 3.2.7 BĐS _ Trang 75 3.2.8 Loại giao dịch Trang 76 3.2.9 Giá cả Trnag 77 3.2.10 Hướng Trang 77 3.2.11 Bài viết Trang 78 3.2.12 Nhóm người dùng Trang 79 3.2.13 Hình BĐS Trang 79 3.2.14 Người đăng ký giao dịch Trang 80 3.2.15 Người dùng _ Trang 80 3.2.16 Thành phố tỉnh Trang 81 3.2.17 Quận huyện _ Trang 81 3.2.18 Chủ BĐS _ Trang 82 3.2.19 Thông tin cá nhân Trang 83 3.2.20 Tin tức Trang 84 3.2.21 Loại tin tức _ Trang 84 3.3 Ràng buộc dữ liệu Trang 85 3.3.1 Convenices Trang 85 3.3.2 Buyers Trang 85 3.3.3 Es_types Trang 85 3.3.4 Money_types Trang 85 3.3.5 Units _ Trang 86 3.3.6 Posintions Trang 86 3.3.7 Estates _ Trang 86 3.3.8 Transaction_types _ Trang 86 3.3.9 Prices Trang 86 3.3.10 Directions Trang 86 3.3.11 Posts Trang 87 3.3.12 Groups Trang 87 3.3.13 Es_images Trang 87 3.3.14 Registrations Trang 87 3.3.15 Users Trang 87 3.3.16 Cities Trang 87 3.3.17 Districts _ Trang 87 3.3.18 Hosts _ Trang 87 3.3.19 Profiles Trang 88 3.3.20 News Trang 88 3.3.21 News_types Trang 84
Trang 73.4 Mô hình chi tiết BĐS _ Trang 89 Chương 4: Giao diện hệ thống Trang 90 4.1 Giao diện người dùng Trang 90 4.1.1 Dự án kinh doanh Trang 90 4.1.2 Tin nhà đất _ Trang 90 4.1.3 Tìm kiếm _ Trang 91 4.1.4 Sàn giao dịch địa ốc Trang 92 4.1.5 Giá vàng – USD _ Trang 92 4.1.6 Giao diện trang chủ _ Trang 93 4.1.7 Giao diện sàn giao dịch Trang 94 4.1.8 Giao diện chi tiết của bài viết _ Trang 95 4.1.9 Giao diện đăng ký bài viết _ Trang 96 4.1.10 Giao diện sau khi đăng ký bài viết xong Trang 96 4.1.11 Xem những bài viết đã đăng ký Trang 97 4.1.12 Thống kê nhà đất Trang 98 4.1.13 Giao diện hiển thị tin tức _ Trang 99 4.1.14 Tìm kiếm tin tức _ Trang 100 4.1.15 Trang thông tin cá nhân _ Trang 100 4.1.16 Thay đổi thông tin cá nhân _ Trang 101 4.1.17 Tạo bài viết Trang 102 4.2 Giao diện quản lý Trang 103 4.2.1 Quản lý hình ảnh _ Trang 103 4.2.2 Quản lý người dùng _ Trang 104 4.2.3 Phân quyền Trang 104 4.2.4 Quản lý bài viết Trang 104 4.2.5 Kiểm duyệt bài viết của người dùng Trang 105 4.2.6 Ẩn hiện bài viết Trang 105 4.2.7 Bài viết hết hạn đăng Trang 106 4.2.8 Bài viết đã giao dịch Trang 106 4.2.9 Thực hiện giao dịch bài viết _ Trang 107 4.2.10 Quản lý tin tức Trang 108 4.2.11 Quản lý tỉnh thành _ Trang 108 4.2.12 Quản lý quận huyện Trang 109 4.2.13 Quản lý loại tin Trang 109 4.2.14 Quản lý kiểu nhà Trang 109 4.2.15 Quản lý loại tiền _ Trang 110 4.2.16 Quản lý vị trí BĐS _ Trang 110 4.2.17 Quản lý hướng BĐS Trang 110
Trang 8Tài liệu tham khảo Trang 111
Trang 9Danh m ục các từ viết tắt
- BĐS: bất động sản
- GVHD: giáo viên hướng dẫn
- SVTH: sinh viên thực hiện
JavaScript Object Notation
- MVC: Model View Controler
Extensible Markup Language
- ACL: Access Control List
Hyper Text Markup Language
- Hình 1 Mô hình MVC trong CakePHP Trang 9
- Hình 2 Yêu cầu điển hình trong CakePHP Trang 15
- Hình 3 Mô hình quan ni ệm dữ liệu Trang 55
- Giao di ện website Trang 75
Trang 10L ỜI MỞ ĐẦU
Trong hoạt động bất động sản hiện nay, hoạt động kinh doanh ngày càng đóng vai trò quan trọng Trong giai đoạn hiện nay để đảm bảo tính minh bạch trên thị trường bất động sản nhu cầu thẩm định giao dịch các tài sản trước khi thực hiện hợp đồng ngày càng cao, nó làm cho các bên tham gia giao dịch yên tâm hơn Nhất là các giao dịch đối với các bất động sản có giá trị lớn như bi ệt thự thì nhu cầu tìm
hiểu, tư vấn cần được quan tâm hơn Hiện nay công tác giao dịch diễn ra trên thị trường chủ yếu là giao dịch ngầm
Những vướng mắc trong khâu định giá tài sản gây khó khăn cho các bên giao
dịch, dẫn đến giao dịch không diễn ra một cách suôn sẻ thuận lợi Trong hầu hết các giao dịch hiện nay thường có lợi cho bên bán vì họ có nhiều thông tin hơn về bất động sản bên mua thường là người thiệt thòi Do đó bên mua bất động sản nên yêu
cầu các bất động sản giao dịch cần phải có các báo cáo cụ thể nhất là các bất động
sản có giá trị lớn như biệt thự lại càng xác định giá trị thực của chúng Do đó cần đến sự có mặt của các tổ chức, công ty thẩm định giá chuyên nghiệp là rất cần thiết
Trang 11CHƯƠNG 1: TÌM HIỂU CAKEPHP FRAMEWORK
1.1 Gi ới thiệu
CakePHP là một nền tảng phát triển ứng dụng nhanh, mã nguồn mở miễn phí sử
dụng ngôn ngữ lập trình PHP Cấu trúc của nó được tạo ra để lập trình viên tạo các ứng dụng web Mục tiêu chủ yếu của chúng tôi là tạo ra một nền tảng có cấu trúc, cho phép bạn làm việc trên cấu trúc đó một cách nhanh chóng mà không mất đi sự
uyển chuyển
CakePHP loại bỏ sự nhàm chán trong phát triển ứng dụng web Chúng tôi cung
cấp cho bạn các công cụ bạn cần để viết thứ bạn cần: đó là logic đặc thù của ứng
dụng Thay vì phải làm đi làm lại một thứ khi bạn bắt đầu tạo mới dự án (prọect),
bạn chỉ cần tạo một bản copy của CakePHP và tập trung vào việc chính của dự án
CakePHP có một đội ngũ phát triển và cộng đồng năng động, điều này mang lại giá trị to lớn cho các dự án Ngoài việc giúp bạn khỏi phải làm đi làm lại một việc nào đó, sử dụng CakePHP đồng nghĩa với phần cốt lõi của ứng dụng của bạn đã được kiểm chứng và cải tiến không ngừng
1.2 Tính năng của CakePHP
Cộng đồng năng động, thân thiện
Việc cấp phép uyển chuyển
Tng thích với PHP 4 và PHP 5
Tích hợp sẵn CRUD (Khi làm việc với cơ sở dữ liệu)
Hỗ trợ làm việc với cơ sở dữ liệu (scaffolding)
Tự động sinh mã code
Kiến trúc MVC
Cho phép tạo ra các URL rõ ràng, dễ hiểu
Cung cấp khả năng bắt lỗi
Trang 12 Cho phép tạo ra các bản mẫu (templating) nhanh chóng và uyển chuyển
Các tiện ích giao diện cho AJAX, JavaScript, HTML Forms,
Có các công cụ xử lý Email, Cookie, Security, Session, yêu cầu (Request Handling)
Danh sách iều khiển truy cập (ACL) uyển chuyển
Cung cấp sẵn tiện ích xử lý dữ liệu (Data Sanitization)
Cung cấp khả năng lưu tạm (Caching) uyển chuyển
Cung cấp khả năng nội địa hóa (localization)
Có khả năng chạy từ bất kỳ thư mục web nào mà không cần phải cấu hình Apache hoặc chỉ cấu hình lại rất ít
1.3 Mô hình MVC trong CakePHP
MVC là gì, là viết tắt của Model, View, Controller Đây là cách người ta phân
một ứng dụng ra làm 3 phần có chức năng khác nhau để dễ quản lí và phát triển các ứng dụng Tầng View là tầng ở vị trí cuối trong 3 tầng, nó đóng vai trò tạo giao diện cho người dùng Tương tác với ứng dụng web của người dùng là tương tác trên giao
diện đó là những thứ đc tạo ra, trình bày bởi tầng này
Nhưng nếu chỉ có out put ra mà bạn không thể biết được người dùng làm gì, click, submit, gởi các HTTP request thì ứng dụng web của bạn cũng chẳng có gì ngoài cái xác vô hồn Khi đó để bắt đc, xử lí các sự kiện này chúng ta sẽ cần đến
tầng Controller
Tầng Controller dùng để quản lí, quyết định phương thức mà ứng dụng web của
bạn sẽ đáp ứng cho các sự kiện, yêu cầu đến từ phía giao diện web của người dùng Đông thời tần này cũng đóng m ột vai trò là cầu nối đến một tầng khác đó là tầng Model, tần Controller sẽ gọi các phương thức để đáp ứng cho các yêu cầu, sự kiện đến từ phía người dùng ( tầng View) và các phương thức này gọi đến các phương
thức tương ứng trên tầng Model để thực thi việc truy xuất Database một cách phù
hợp CakePHP tuân theo mô hình thiết kế phần mềm chuẩn (design pattern) MVC
Trang 13MVC chia chương trình thành 3 phần riêng lẻ:
• Model: Mô tả dữ liệu của ứng dụng
• View: Hiển thị dữ liệu của model
• Controller: Xử lý và điều hướng các yêu cầu của client
Hình 1 Mô hình MVC trong CakePHP
Hình 1 là một ví dụ về yêu cầu cơ bản của MVC trong CakePHP Giả sử một client tên là "Ricardo" click vào link "Buy A Custom Cake Now" trên trang chủ của ứng dụng
- Ricardo click vào link trỏ đến địa chỉ
http://www.example.com/cakes/buy, và trình duyệt của Ricardo gửi một yêu cầu đến máy chủ web (web server)
- Bộ phận điều vận (dispatcher) của máy chủ web sẽ kiểm tra URL gửi đến (/cakes/buy) và giao nó đúng cho controller chịu trách nhiệm xử lý yêu
cầu này
Controller sẽ tiến hành xử lý các logic của ứng dụng Ví dụ như kiểm tra
xem Ricardo đã đăng nhập hay chưa
- Controller cũng có thể sử dụng các model để truy cập đến dữ liệu của ứng
dụng Các Model thường mô tả các bảng trong cơ sở dữ liệu, nhưng cũng
có thể mô tả các mục của LDAP (LDAP entries), hoặc mô tả các RSS
feeds, hoặc là các file trên ổ cứng Trong ví dụ này controller sử dụng 1
Trang 14model để lấy thông tin về lần mua hàng gần nhất của Ricardo từ cơ sở dữ
liệu
- Một khi controller xử lý dữ liệu xong, nó sẽ chuyển dữ liệu cho view View sẽ tiếp nhận dữ liệu và hiển thị cho client View trong CakePHP thường ở dạng HTML, nhưng view cũng có thể ở dạng PDF, XML hoặc JSON, tùy theo nhu cầu
Một khi view sử dụng dữ liệu từ controller để hiển thị, nội dung của view
đó được gửi cho trình duyệt của Ricardo
- Hầu hết các yêu cầu tới ứng dụng MVC đều tuân theo thiết kế này
Tại sao lại sử dụng mô hình MVC?
Tại vì nó giúp cho ứng dụng dễ bảo trì, mobule hóa, và được xây dựng nhanh chóng MVC tách các tác vụ của ứng dụng thành các phần riêng lẽ model, view, controller giúp cho việc xây dựng ứng dụng nhẹ nhàng hơn Dễ dàng thêm các tính năng mới, và các tính năng cũ có thể dễ dàng thay đổi MVC cho phép các nhà phát triển và các nhà thiết kế có thể làm việc đồng thời với nhau, kể cả trong bước phát triển prototype MVC cho phép thay đổi trong 1 phần của ứng dụng
mà không ảnh hưởng đến các phần khác
1.4 Cài đặt
1.4.1 Cài đặt
1.4.1.1 Yêu c ầu hệ thống
- Hệ điều hành: Linux hoặc Windows, có cài sẵn php, mysql, apache Trên
windows, tôi dùng gói wampserver 2.0
- PHP: phiên bản 4.3.2 hoặc cao hơn CakePHP làm việc với cả PHP4 và PHP5
- Hệ quản trị CSDL: CakePHP hỗ trợ nhiều hệ quản trị CSDL khác nhau (MySQL 4
hoặc cao hơn, PostgreSQL, Sql Server, SQLite, Oracle)
1.4.1.2 Chu ẩn bị cài đặt
- Tải phiên bản CakePHP mới nhất (1.3.2 stable) từ địa
chỉ: http://github.com/cakephp/cakephp/archives/1.3
- Giải nén, cho vào thư mục www của web server
- Cho quyền ghi đối với thư mục app/tmp của CakePHP
1.4.1 3 Cài đặt
- Thực hiện xong bước 2 nghĩa là bạn đã cài đặt xong CakePHP!
Trang 15- Chúng ta chỉ cần cấu hình thêm vài cái cần thiết, khi
gõ http://localhost/test/cakephp1.3.2/, nhận được trang với giao diện tương tự sau,
nghĩa là bạn đã cài thành công!
- Để có được màn hình như thế này, bạn cần thực hiện một số việc sau:
+ Chmod thư mục app/tmp thành 0777 (nếu trên host, còn localhost thì khỏi cần)
+ Mở file app/config/core.php:
Thay đổi giá trị của dòng
Configure::write(‘Security.salt’, DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9
mi2010‘);
Thay đổi giá trị của dòng
Configure::write(‘Security.cipherSeed’, ‘768593096574535424967496836452010‘)
;
Có thể thay bằng bất cứ chuỗi gì bạn muốn, ở đây tôi thêm số 2010 ở phía sau, mục
đích là làm cho các chuỗi này khác với chuỗi mặc định của CakePHP Các chuỗi
này sẽ được dùng trong vấn đề mã hóa của CakePHP
Trang 16+ Tạo csdl với tên: test_cake, mở file app/config/database.php, điền như sau:
var $default = array(
1.5 Các nguyên t ắc cơ bản của CakePHP
CakePHP cung cấp một nền tảng mạnh mẽ cho ứng dụng của bạn CakePHP có
thể quản lý mọi khía cạnh, từ các yêu cầu ban đầu của client cho đến khi hiển thị trang web Và vì CakePHP tuân thủ các nguyên tắc của MVC, CakePHP cho phép
bạn dễ dàng tùy biến và mở rộng hầu hết các mặt của ứng dụng
CakePHP cũng cung cấp các cấu trúc, tổ chức cơ bản, từ tên file cho đến tên
bảng của cơ sở dữ liệu, giúp cho toàn bộ ứng dụng nhất quán và hợp lý Điều này thì đơn giản nhưng rất hữu ích Hãy tuân theo các quy ước và bạn sẽ biết được chính xác mọi thứ đã được sắp xếp
1.5.1 C ấu trúc của CakePHP
Đặc trưng của CakePHP là các lớp controller, Model và View; tuy nhiên
CakePHP cũng có các lớp và các đối tượng khác giúp cho việc xây dựng ứng dụng MVC nhanh hơn và thú vị hơn Component, Behavior cà Hepler là các lớp cung cấp
khả năng mở rộng và sử dụng lại nhằm nhanh chóng thêm chức năng vào các lớp MVC cơ bản
1.5.1.1 Các l ớp mở rộng của Controller(Components)
Một component là một lớp xử lý logic được sử dụng trong controller Nếu chúng
ta có một quy luật logic chung cho nhiều controller và chúng ta muốn các controller này chia sẽ logic đó thì chúng ta nên dùng component Ví dụ lớp EmailComponent giúp tạo và gửi email dễ dàng hơn Thay cho việc viết các phương thức cho mỗi controller để thực hiện logic này(tạo và gửi email), chúng ta có thể đóng gói logic này(viết thành component) và dùng chung
Trang 17CakePHP có nhiều callbacks cho chúng ta sử dụng trong trường hợp chúng ta
muốn thêm vài xử lý logic giữa các xử lý thiết yếu của CakePHP Các callback (hàm gọi lại) đó là:
• beforeFilter(), thực thi trước tất cả action logic của controller(Phương thức được
gọi để xử lý yêu cầu của client gọi là action logic của controller.)
• beforeRender(), thực thi sau mỗi logic của controller nhưng trước khi nội dung được hiển thị(view được hiển thị)
• afterFilter(), Được thực thi sau tất cả các xử lý logic của controller kể cả hiển thị
nội dung(view được hiển thị) Có thể không có sự khác biệt giữa afterRender() và afterFilter() trừ khi bạn tự gọi render() trong action của controller và thêm vài xử lý logic sau khi gọi
• Khi xảy ra lỗi về hệ thống (ví dụ như thiếu view,không kết nối được đến
database) thì afterFilter() sẽ không được gọi
1.5.1.2 Các l ớp mở rộng của View(Helpers)
Một lớp Helper là một lớp tiện ích được dùng để xử lý các logic trong view
Cũng giống như component của controller, các view có thể dùng chung một hoặc nhiều lớp helper Một trong những lớp helper phổ biến là AjaxHelper, lớp này giúp cho việc viết ajax trong view trở nên dễ dàng hơn
Hầu hết các ứng dụng đều có các đoạn mã html (html code) của view được sử
dụng nhiều lần CakePHP giúp cho việc sử dung lại đoạn mã dễ dàng hơn với
layout và element Có thể hiểu layout là bộ khung HTML của trang web, còn
element là các đoạn mã được sử dụng chung trong các view Thông thường các element sẽ được lắp ghép vào view, view sẽ được lắp ghép vào layout kết quả này
sẽ được hiển thị bởi một controller
1.5.1.3 Các l ớp mở rộng của Model(Behaviors)
Tương tự như component và helper, behavior là cách để thêm các chức năng thông dụng vào các model Ví dụ, nếu bạn lưu dữ liệu người dùng trong một cấu trúc cây, bạn có thể dùng User model như là một cây (tree) bằng cách sử dụng tree behavior, khi đó user model của bạn có thêm các chức năng của cây như xóa, thêm,
di chuyển các nodes trong cấu trúc cây bên dưới
Trang 18Ngoài behavior, model còn có một lớp khác gọi là DataSource DataSource thì
trừu tượng, cho phép các model thao tác với các kiểu dữ liệu khác nhau một cách
nhất quán Thông thường nguồn dữ liệu của ứng dụng thường là cơ sở dữ liệu, CakePHP cho phép viết các DataSource khác cho phép các model của bạn thao tác
với các RSS feed, các CSV file, hay các sự kiện của iCal DataSource cho phép bạn
kết nối các bản ghi từ nhiều nguồn dữ liệu khác nhau thay vì chỉ bị giới hạn trong các câu lệnh join của SQL Chẳng hạn DataSource cho phép bạn kết nối LDAP model với nhiều sự kiện iCal
Cũng giống như controller, model cũng có các hàm callback:
AppController (nằm trong /app/app_controller.php), AppHelper (trong
/app/app_helper.php), AppModel (trong /app/app_model.php)
Mặc dù routes không phải là một lớp hay file, nhưng đóng một vai trò quan
trọng trong xử lý các yêu cầu (request) gửi đến CakePHP CakePHP sử dụng route
để gọi hàm (action) của controller tương ứng với một URL Mặc đình thì với URL
“/controller/action/var1/var2” CakePHP sẽ gọi hàm Controller::action($var1,
$var2) tuy nhiên chúng ta có thể sử dụng route để tùy biến URL và cách hiểu URL
của CakePHP
Trang 19Các ứng dụng cũng có thể cần phải đóng gói các chức năng nào đó Plugin cho phép bạn đóng gói các model, controller, view lại và dùng plugin này cho các ứng
dụng khác nhau, không liên quan đến nhau Chẳng hạn các chức năng về quản lý người sử dụng có thể được đóng gói lại thành một plugin, hoặc một ứng dụng blog đơn giản cũng có thể được đóng gói thành plugin
1.6 Yêu c ầu điển hình của CakePHP
Chúng ta đã làm quen với các thành phần cơ bản của CakePHP, bây giờ là lúc xem xét các đối tượng làm việc với nhau như thế nào để hoàn thành một yêu cầu đơn giản Tiếp tục ví dụ trước, Chúng ta tưởng tượng là Ricardo vừa click vào link
"Buy A Custom Cake Now" từ một trang ứng dụng CakePHP
Hình: 2 Yêu cầu điển hình của CakePHP
Màu đen = thành phần bắt buộc, Màu xám = Thành phần tùy chọn
Màu xanh = callback (hàm gọi lại)
- Khi Ricardo click vào link có địa chỉ http://www.example.com/cakes/buy trình duyệt của Ricardo thực hiện một yêu cầu đến máy chủ web
- Bộ điều hướng (Router) phân tích cú pháp của URL để trích ra các tham
số của yêu cầu: controller được sử dụng, action sẽ gọi, và các đối số khác
Trang 20- Bằng cách đối chiếu với các route, controller và action (phương thức của controller) tương ứng sẽ được gọi Trong trường hợp này là phương thức buy() của controller CakesController Hàm gọi lại (callback) của
controller, beforeFilter() được gọi trước khi bất cứ logic acion nào được
gọi
- Controller có thể sử dụng các model để truy cập vào dữ liệu của ứng
dụng Trong ví dụ này, controller sử dụng một model để lấy thông tin về
lần mua cuối của Ricardo từ cơ sở dữ liệu Các callback, behavior,
DataSource của model lại có thể được gọi lúc này Mặc dù việc sử dụng model là không bắt buộc, tất cả các controller của CakePHP ban đầu đều yêu cầu ít nhất một model
- Sau khi model nhận được dữ liệu, nó sẽ trả lại cho controller Lúc này callback của model cũng có thể được gọi
- Controller cũng có thể sử dụng component để lọc lại dữ liệu hoặc thực
hiện các xử lý khác như làm việc với session, chứng thực, gửi email,
- Một khi controller đã sử dụng các model, component để lấy dữ liệu và xử
lý logic xong, controller sẽ gửi dữ liệu cho view bằng phương thức set()
của controller Các hàm callback của controller có thể được gọi trước khi
dữ liệu được gửi đi Logic của view lại tiếp tục được thực hiện, logic này
có thể là gộp các element hoặc sử dụng helper Mặc định, view sẽ được
hiển thị bên trong layout
- Các callback khác của controller như afterFilter có thể được thực thi trước khi kết quả cuối cùng của view được gửi về trình duyệt của
Ricardo
1.7 C ấu trúc thư mục của CakePHP
Sau khi bạn download và giải nén CakePHP, bạn cần lưu ý đến 3 thư mục chính sau:
Th mục app là nơi mà bạn làm việc: Nơi đây lưu các file của ứng dụng do
bạn viết
Th mục cake là nơi bạn thay đổi các file core của CakePHP Bạn phải thật
cẩn thận khi thay đổi các file trong này, và chúng tôi không thể giúp gì cho bạn nếu
bạn thay đổi các file core
Th mục vendors là nơi bạn cài các thư viện PHP của nhà cung cấp thứ 3 mà
bạn cần để sử dụng với ứng dụng CakePHP của bạn
Trang 21của ứng dụng
Config Nơi lưu giữ một số file cấu hình của CakePHP File lưu thông tin
kết nối đến cơ sở dữ liệu, file bootstrap (dùng để nạp các hàm không nằm trong một lớp nào cả), file cấu hình CakePHP nên được lưu ở đây
Controllers Chứa các controller của ứng dụng và các component
Libs Chứa các thư viện của nhà cung cấp thứ 1, không đến từ nhà cung
cấp thứ 3 hoặc bên ngoài Cho phép chúng ta phân chia các thư viên bên trong của tổ chức chúng ta thành nhiều trạm(vendors) thư viện
Locale Lưu các file văn bản được sử dụng cho mục đích quốc tế hóa ứng
dụng
Models Chứa các file model, behavior và datasource của ứng dụng
Plugins Chứa các plugin
Tmp Lưu các file tạm của CakePHP Dữ liệu thực CakePHP lưu phụ
thuộc vào bạn cấu hình CakePHP như thế nào, tuy nhiên thư mục này thường được sử dụng để lưu các mô tả về model, logs, và đôi khi là thông tin session
Bạn phải chắc chắn rằng thư mục này tồn tại và có thể ghi được
nếu không thì hiệu năng của ứng dụng sẽ bị ảnh hưởng nghiêm
trọng Ở chế độ sửa lỗi (debug), CakePHP sẽ cảnh báo cho bạn
Trang 22nếu thư mục này không tồn tại hoặc không ghi được
Vendors Các lớp hoặc các thư viện của nhà cung cấp thứ 3 nên được để
trong thư mục này Làm như vậy sẽ giúp cho các file này dễ dàng được truy cập bằng cách sử dụng hàm App::Import('vendor', 'name') Thoạt nhìn qua thì thư mục này có vẻ là thừa vì có 1 thư
mục vendors khác nằm ở ngoài Chúng ta sẽ tìm hiểu sự khác nhau của các thư mục này khi chúng ta thảo luận về quản lý thiết
lập nhiều ứng dụng và hệ thống phức tạp
Views Các file hiển thị được để ở đây: các file element, trang thông báo
lỗi, các file helper, các file layout và các file view
Webroot Trong môi trường thật (CakePHP có thể chạy ở môi trường
development, test, production), thư mục này nên đóng vai trò là thư mục gốc của ứng dụng Các thư mục ở đây thường là các thư
mục cho css, ảnh và javascript
1.8 Các quy ước của CakePHP
1.8 1 Các quy ước về file và tên lớp
Nói chúng, tên file sử dụng dấu gạch dưới, trong khi tên lớp sử dụng
CamelCased (ví dụ như SportCar) Vì vậy nếu bạn có lớp MyNiftyClass, khi đó trong CakePHP tên của file đó nên là my_nifty_class.php Dưới đây là các ví dụ về cách đặt tên file cho mỗi dạng lớp khác nhau mà bạn thường sử dụng trong ứng
Trang 23 ịnh nghĩa lớp behavior EspeciallyFunkableBehavior nằm trong file
especially_funkable.php
ịnh nghĩa lớp view SuperSimpleView nằm trong fle super_simple.php
ịnh nghĩa lớp helper BestEverHelper nằm trong file best_ever.php
Mỗi file được đặt trong 1 thư mục quy ước dưới thư mục app
1.8 2 Quy ước về tên model và tên bảng cơ sở dữ liệu
Model classnames là số ít và „CamelCased‟ Person, BigPerson, hay
ReallyBigPerson là những ví dụ về tên Model thông thường
Tên bảng cơ sở dữ liệu tuơng ứng cho cakePHP model là số nhiều và được gạch dưới Các bảng sẽ được đề cập tới bởi các model tương ứng là people,big_people và really_big_people tương ứng
Bạn có thể sữ dụng thư viện tiện ích “Inflector” để kiểm tra từ số nhiều hay số ít Tên trường có hai hay nhiều từ sẽ được nối bằng gạch nối dưới như : first_name
Những khóa ngoại trong các mối quan hệ hasMany,belongsTo hoặc hasOne được chấp nhận mặc định ở dạng tên(số ít) của bảng liên quan theo sau _id Vì vậy ,
nếu một Baker hasMany với Cake thì bảng cakes sẽ ràng buộc với bảng bakes theo thông qua một khóa ngoại là baker_id Đối với một bảng có tên tạo từ nhiều từ như category_types thì khóa ngoại có sẽ là category_type_id
Kết nối các bảng, được dùng trong kết hợp hasAndBelongsToMany giữa các model sẽ được đặt tên sau theo bảng model sẽ kết nối theo thứ tự alphabetical
Tất cả các bảng mà các model của CakePHP tương tác tới đều cần một khóa chính duy nhất để nhận định mỗi hàng Nếu bạn muốn mô hình hóa một bảng mà không có một khóa chính nào thì một trường khóa chính đơn sẽ được thêm vào
bảng CakePHP không hổ trợ tạo những khóa chính Nếu bạn muốn thao tác trực
tiếp trên bảng dữ liệu, hãy sữ dụng câu truy vấn trực tiếp hoặc thêm khóa chính để
nó hoạt động như một mô hình bình thường
Trang 24CREATE TABLE posts_tags (
id INT(10) NOT NULL AUTO_INCREMENT,
post_id INT(10) NOT NULL,
tag_id INT(10) NOT NULL,
PRIMARY KEY(id));
)
Thay vì sử dụng một mã khóa tự động tăng là khóa chính, bạn cũng có thể sử
dụng char (36) Cake sau đó sẽ sử dụng 36 ký tự UUID (String:: uuid) bất cứ khi nào bạn lưu một bản ghi mới bằng cách sử dụng phương thưc Model::save
1.8 3 Quy ước về Controller
Tên lớp Controller ở dạng số nhiều và “CamelCased” và kết thúc bằng
Controller, ví dụ: PeopleController và LatestArticlesController Phương thức mặc định khi bạn gọi một controller mà không chỉ định chính xác là gọi action nào là index() Ví dụ: có một yêu cầu tới http://www.example.com/apples/ thì cakePHP sẽ
tự động gọi phương thức index() của lớp ApplesController Và nếu gọi tới
http://www.example.com/apples/view/ thì phương thức view trong controller đó sẽ được thực hiện
1.8 4 Quy ước về View
File trong view được đặt tên sau hàm chức năng, sau dấu gạch ngang Hàm getReady() của lớp PeopleController sẽ tìm thấy trong
/app/views/people/get_ready.ctp mẫu cơ bản là
/app/views/controller/underscored_function_name.ctp Bằng cách đặt tên các thành
phần ứng dụng sử dụng theo quy ước của CakePHP bạn có được chức năng mà không có sự rắc rối và dễ cấu hình một số ví dụ sử dụng theo quy ước
Database table: "people"
Model class: "Person", tại thư mục /app/models/person.php
Trang 25 Controller class: "PeopleController", ở thư mục
/app/controllers/people_controller.php
View template, tại thư mục /app/views/peoples/index.ctp
Sử dụng những quy ước , CakePHP biết rằng yêu cầu từ
http://example.com/people/ có phương án gọi hàm index() của Peoplecontroller, nơi mà model Person tự động có sẵn (và tự động gắn với bảng people trong cơ sở
dữ liệu), và dùng file index.ctp để hiển thị ra trình duyệt của người sử dụng
1.9 Các thành ph ần chính của CakePHP
1.9.1 Model
Models đại diện cho dữ liệu và được dùng trong các ứng dụng CakePHP để truy cập
dữ liệu Một Model thường đại diện cho một bảng dữ liệu nhưng có thể được dùng
để truy cập bất cứ những gì được lưu trữ dữ liệu như các tập tin, bản ghi LDAP, các
sự kiện iCal, hoặc các hàng trong một tập tin CSV Một Model có thể được ràng
buộc với các Models khác Ví dụ như : một Recipe có thể được ràng buộc với
Author của Recipe bằng Ingredient trong Recipe
Phần này sẽ giải thích những điểm đặc trưng của Models có thể được tự động hóa, làm thế nào để có thể ghi đè lên những điểm đó, và những thức, thuộc tính nào mà
một Model có thể có Nó sẽ trình bày những cách khác nhau để kết hợp cơ sở dữ
liệu của bạn, Nó sẽ thể hiện làm thế nào để tìm kiếm, lưu trữ và xóa dữ liệu Cuối cùng là xem xét Datasources
1.9.1.1 Hi ểu biết về Models
Một Model đại diện cho mô hình dữ liệu của bạn Trong lập trình hướng đối tượng
một mô hình dữ liệu là một đối tượng đại diện cho một một thứ, như một chiếc xe,
một người hay một ngôi nhà Ví dụ : một blog có thể có nhiều bài viết (Blog Post)
và mỗi bài viết có thể có nhiều ý kiến (Comment) Blog, Post, Comment là những
ví dụ cho Models, mỗi cái sẽ được ràng buộc với các cái khác
Đây là một ví dụ đơn giản về việc định nghĩa một Model trong CakePHP:
Trang 26Chỉ cần với khai báo đơn giản như trên, Model Ingredient được đặt cho tất cả những
chức năng bạn cần để tạo câu truy vấn để lưu và xóa dữ liệu Chúng là những
phương thức kỳ diệu từ lớp Model của CakePHP bởi tính kỳ diệu của tính thừa kế Model Ingredient mở rộng ứng dụng Model, AppModel, được mở rộng từ lớp
Model nội tại của CakePHP Đó là cốt lõi của lớp Model để đặt các chức năng cho Model Ingredient của bạn
Tạo tập tin PHP cho Model của bạn trong /app/models/ hoặc trong thư mục con của /app/models/ CakePHP sẽ tìm kiếm nó ở một nơi bất kỳ trong thư mục Theo quy ước nó cần có cùng tên với lớp Ví dụ : ingredient.php với Models đã được định nghĩa, nó có thể được truy cập từ bên trong Controller của bạn CakePHP tự động làm cho Model cho phép truy cập khi nó có tên phù hợp với Controller Ví dụ : Một Controler được đặt tên là IngredientsController sẽ tự động khởi tạo model
Ingredient và gắn nó vào controller bằng $this->Ingredient
Trang 27Trong ví dụ sau đây, Recipe có một sự ràng buộc với Ingredient model
1.9.1.2 T ạo bảng cơ sở dữ liệu
Trong khi CakePHP có thể có datasources mà không phải là cơ sở dữ liệu điều khiển , hầu hết thời gian chúng có CakePHP được thiết kế cho thuyết bất khả tri và
Trang 28sẽ làm việc với MySQL, MSSQL, Oracle, PostgreSQL và những hệ quản trị khác
Bạn có thể tạo các bảng cơ sở dữ liệu như bình thường Khi bạn tạo các lớp Model thì chúng sẽ tự động định nghĩa các bảng mà bạn đã tạo
Tên bảng được quy ước viết bằng chữ thường và các bảng tạo bởi nhiều từ thì được nối với nhau bằng dấu gạch dưới Ví dụ, một Model tên là Ingredient sẽ dành cho bảng có tên là ingredients Một model tên là EventRegistration sẽ dành cho
bảng có tên là event_registrations CakePHP sẽ kiểm tra để xác định dạng dữ liệu
của từng trường trong bảng và sữ dụng thông tin này để tự động hóa các tính năng khác nhau như trong việc xuất các trường dữ liệu lên View Tên các trường của
bảng cơ sở dữ liệu cũng được quy ước viết bằng chữ thường và nối với nhau bằng
dấu gạch dưới Trong phần còn lại của phần này bạn sẽ được thấy làm thế nào để CakePHP định nghĩa cơ sở dữ liệu
Mỗi hệ quản trị cơ sở dữ liệu định nghĩa loại dữ liệu theo những cách khác nhau
Từ lớp mã nguồn cho đến hệ thống dữ liệu, CakePHP vẽ ra trên một giao diện thống
nhất, không có vấn đề mà hệ thống cơ sở dữ liệu bạn cần để chạy trên nó
1.9 1.3 Các phương thức thường dùng trong Model
Find - find($type, $params);
$type là trường hợp dễ bị lỗi Chỉ một kí tự viết hoa (ví dụ : „All‟ )sẽ không cho kết
quả như mong đợi $param được dùng để truyền các tham số tìm kiếm như :
'order' => array('Model.created', 'Model.field3 DESC'), //string or
array defining order
Trang 29'group' => array('Model.field'), //fields to GROUP BY
echo $model->field('name', array('created <' => date('Y-m-d H:i:s')),
'created DESC'); // echo the name of the last created instance
read()
Read() là phương thức được dùng để thiết lập mô hình dữ liệu hiện hành Nhưng nó còn được dùng trong trường hợp khác, là để lấy một bản ghi ra từ cơ sỡ dữ liệu function beforeDelete($cascade) {
$rating = $this->read('rating'); // gets the rating of the record
Trang 30$this->read(); // reads a third record
$record = $this->data // stores the third record in $record
Dưới đây là một ví dụ đơn giản để điều khiển sử dụng một model CakePHP để lưu
dữ liệu vào một bảng cơ sở dữ liệu:
function edit($id) {
Trang 31//Has any form data been POSTed?
//If no form data, find the recipe to be edited
//and hand it to the view
$this->set('recipe', $this->Recipe->findById($id));
}
Sau đây là một số phương thức lưu dữ liệu trong model
set($one, $two = null)
save(array $data=null, boolean $validate = true, array $fieldList =
array())
save(array $data = null, array $params = array())
create(array $data = array())
saveField(string $fieldName, string $fieldValue, $validate = false)
updateAll(array $fields, array $conditions)
Trang 32saveAll(array $data = null, array $options = array())
delete – Xóa dữ liệu
delete(int $id = null, boolean $cascade = true);
Xóa bản ghi được chỉ định bởi biến $id Mặc định thì xóa cả những bản ghi có liên quan tới bản ghi được chỉ định Ví dụ khi xóa một User thì các thông tin liên quan tới User đó cũng được xóa
remove
remove(int $id = null, boolean $cascade = true);
sử dụng như hàm delete()
deleteAll
deleteAll(mixed $conditions, $cascade = true, $callbacks = false)
Giống như với delete() và remove() , nhưng deleteAll() xóa tất cả các bản ghi được chỉ định bởi một điều kiện ràng buộc nào đó
1.9.1.4 Các lo ại quan hệ trong Model
Các liên kết được định nghĩa bằng cách tạo ra một lớp biến được đặt tên sau liên
kết mà bạn đang định nghĩa Lớp biến đó đôi khi có thể là một chuỗi , nhưng có thể
là một mảng đa chiều để xác định cụ thể mối liên kết
Trang 33Bây giờ chúng ta có dữ liệu Profile truy cập từ model User, hãy định nghĩa kết
hợp belongsTo trong model Profile Kết hợp belongsTo là sự bổ sung tự nhiên cho
kết hợp hasOne và hasMany: Nó cho phép chúng ta xem dữ liệu từ một phương
diện khác
Khi đặt khóa cho bảng dữ liệu đối với mối liên kết belongsTo phải theo quy ước sau:
hasMany
Bước tiếp theo là định nghĩa một kết hợp „User hasMany Comment‟ Một kết
hợp hasMany sẽ cho phép chúng ta lấy comment của user khi chúng ta lấy một bản ghi của user đó Khi đặt khóa cho bảng dữ liệu đối vơi một liên kết hasMany
hasAndBelongsToMany
Bây giờ là dạng kết hợp cuối cùng : hasAndBelongsToMany, hoặc HABTM
Kết hợp này được dùng khi bạn có hai model cần kết nối với nhau liên tục nhiều lần
va nhiều cách khác nhau
Sự khác biệt chính giữa hasMany và HABTM là một liên kết giữa các model trong HABTM không phải độc quyền Trong khi đó liên kết giữa các model trong hasMany thì độc quyền Nếu User hasMany với Comments thì một comment chỉ
có thể liên kết tới một user xác định
1.9.2 View
View là nơi thể hiện dữ liệu đã được xử lý của chúng ta Một view được xem như một trang template
Lớp View của CakePHP là nơi bạn trình bày cho người dùng của bạn Những gì
biểu diến sẽ được đưa vào các tập tin (X)HTML và chuyển đến trình duyệt
CakePHP xem các tập tin được viết bằng PHP và có phần mở rộng mặc định ctp (CakePHP Template) Những tập tin này chứa tất cả logic thông dụng cần để lấy dữ
liệu từ controller trong một định dạng mà đã sản sàng cho các đối tượng bạn đang
phục vụ Tập tin của View được lưu trong /app/views trong một thư mục sau khi controller sử dụng các tập tin, và được đặt tên theo các hành động tương ứng với nó
Trang 34Ví dụ: file view của Products controller là hành động “view()”, bình thường sẽ được tìm thấy ở /app/views/products/view.ctp Lớp view trong CakePHP có thể được tạo thành từ một số bộ phận khác:
layouts: xem các file chứa các mã thông dụng và được tìm trong nhiều gói giao diện ứng dụng của bạn Hầu hết các trình trình bày được trả bên trong một bản
mẫu
elements: dùng ể thiết hổ trợ các view giống nhau khỏi mất thời gian code
lại nhiều lần.Elements thường được trả bên trong các view
helpers: Một lớp Helper là một lớp tiện ích được dùng để xử lý các logic trong view Cũng giống như component của controller, các view có thể dùng chung
một hoặc nhiều lớp helper Một trong những lớp helper phổ biến là AjaxHelper, lớp này giúp cho việc viết ajax trong view trở nên dễ dàng hơn
1.9.2.1 Layout
Một Layout chứa mã trình bày bao quanh một view Bất cứ điều gì bạn muốn xem trong tất cả các view đều được đặt trong một layout Layout được đặt trong /aap/views/layouts Layout mặc định của CakePHP có thể được ghi đè lên bằng cách tạo ra một layout mặc định mới tại /app/views/layouts/default.ctp khi một layout mặc định mới được được tạo ra Controller –chuyển đến layout mặc định được chỉ định Khi tạo một layout , bạn cần phải báo cho CakePHP nơi bạn đặt code cho view của bạn Để làm vậy , chắc chắn nơi đặt layout của bạn cho
$content_for_layout(nội dung của layout)và $title_for_layout(tên của layout) Dưới đây là một ví dụ về layout mặc định:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $title_for_layout?></title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
Trang 35<! Include external files and scripts here (See HTML helper for more
info.) >
<?php echo $scripts_for_layout ?>
</head>
<body>
<! If you'd like some sort of menu to
show up on all of your views, include it here >
Biến $scripts_for_layout chứa bất kỳ tập tin bên ngoài và các bản có trong xây
dựng trong HTML helper Hữu ích cho cả javascript và CSS bạn có thể tạo nhiều layout như bạn muốn: chỉ cần đặt chúng trong app/views/layouts và chuyển đổi
giữa chúng bên trong hành động điều khiển của bạn bằng cách sử dụng biến $layout , hoặc hàm setLayout ()
Ví dụ, nếu một phần của trang web của tôi bao gồm một không gian quảng cáo banner nhỏ, tôi có thể tạo ra một bố trí mới với không gian quảng cáo nhỏ hơn và
Trang 36chỉ định nó như là cách bố trí cho hành động của tất cả các điều khiển bằng cách sử
set(string $var, mixed $value)
Views có hàm set() tương tự như set() của đối tượng controller Nó cho phép
bạn thêm các biến vào view vars Sử dụng set() từ view cho phép thêm vào các biến
gửi đến layout và elements sẻ được triệu gọi sau đó Sử dụng set() là cách chính để
Trang 37gửi dữ liệu từ controller đến view của bạn Một khí bạn sữ dụng set() biến đó có thể được truy cập trong view
Trong view bạn có thể làm:
$this->set('activeMenuButton', 'posts');
Sau đó trong layout biến $activeMenuButton sẽ có sản và có giá trị “posts”
getVar()
getVar(string $var) lấy giá trị của viewVar với tên là $var
getVars() lấy tất cả danh sách các biến có sãn trong phạm vi hiện hành Trả
về một mảng các biến
error() error(int $code, string $name, string $message)
hiển thị một trang báo lổi cho người sử dụng sử dụng layout/error.ctp để trả lại
trang $this->error(404, 'Not found', 'This page was not found, sorry'); Điều này sẽ làm cho một trang báo lỗi với thông báo được chỉ định Quan trọng của nó là bản
thảo thực hiện không dừng lại được bởi View::error() Vì vậy bạn phải ngừng thực thi mã của bạn nếu bạn muốn tạm dừng lại
element()
element(string $elementPath, array $data, bool $loadHelpers)
Chuyển đến một element hoặc xem một phần Xem phần về element cho biết cho biết thêm nhiều thông tin và ví dụ
uuid()
uuid(string $object, mixed $url)
Tạo ra một DOM ID không ngẫu nhiên duy nhất cho một đối tượng, dựa vào loại đối tượng và địa chỉ Phương pháp này thường dùng bởi các helpers cần tạo ra DOM ID duy nhất cho element chẳng hạn như AjaxHelper
Trang 38$uuid = $this->uuid('form', array('controller' =>
'posts', 'action' => 'index'));
//$uuid contains 'form0425fe3bad'
addScript()
addScript(string $name, string $content)
Thêm nội dung cho các bộ đệm bản thảo nội bộ Bộ đệm này được làm sẵn trong layout như là $scripts_for_layout Phương pháp này hữu ích khi tạo các Helpers
cần phải thêm javascript hoặc css trực tiếp cho layout Hãy nhớ rằng bản thảo được thêm từ layout hoặc các element , trong layout sẽ không được thêm vào
$scripts_for_layout Phương pháp này thường được sử dụng từ các Helpers bên trong, giống như Javascript và Html Helpers
1.9.2.3 Helper
CakePHP có một số Helpers hỗ trợ trong việc tạo ra cách trình bày Chúng hỗ
trợ trong việc tạo ra khuôn mẫu đẹp (bao gồm cả hình thức), hỗ trợ trong định dạng văn bản, thời gian và số, và thậm chí có thể tăng tốc độ chức năng Ajax Dưới đây
là tóm tắt những Helpers Helpers của cakePHP
Html Thuận tiện cho việc tạo các phương pháp đánh dấu cũng như các thành
lập Hình ảnh, liên kết, bảng biểu, các thẻ tiêu đề và nhiều hơn nữa Javascript Javascript được sử dụng để thoát khỏi các giá trị để sử dụng trong JavaScripts, viết
ra dữ liệu cho các đối tượng JSON, và khối mã định dạng Number số và định dạng
Trang 39tiền tệ Paginator Chia trang dữ liệu và phân loại Rss Phương pháp tiện lợi cho
xuất dữ liệu
XML
Session Truy cập để viết ra các giá trị phiên làm việc trong view Text Liên kết
một cách mạnh mẻ,làm nổi bật, cắt bỏ từ một cách thông minh Time Tìm ra năm
tiếp theo ,định dạng đẹp (Hôm nay, 10:30) và chuyển đổi vùng thời gian Xml Phương pháp tiện lợi cho việc tạo tiêu đề XML và các element
Với các bạn đã từng làm việc với Cakephp hẳn các bạn không lạ gì việc sử dụng các hepler trong cake như form, html, javascript Sau đây tôi xin liệt kê một số hàm hay sử dụng nhất trong cakephp, cấu trúc và cách sử dụng chúng
$javascript->link($url, $inline);
$url (require): đường dẫn tới file javascript Các file javascript sẽ được đặt trong thư mục „app/webroot/js‟ Mặc định url là đường dẫn tới thư mục app/webroot/js/
$inline: (boolean) Nếu giá trị là true, thì thẻ script sẽ được in trong thẻ header ,
nếu là false thì sẽ in trong $script_for_layout Giá trị mặc đinh là true
Ví dụ:
<?php echo $javascript->link('script.js', true); ?>
//Dữ liệu trả về html
<script type="text/javascript" src="/test/js/script.js"></script>
$html->css(mixed $path, string $rel = null, array $htmlAttributes = array(),
boolean $inline = true);
Tạo một link tới file css Nếu $inline được gán là false, thì thẻ css sẽ được đặt bên trong biến $script_for_layout, còn là true thì đặt trong thẻ header Mặc định đường dẫn trong của file css là /app/webroot/css/
Trang 40Ví dụ:
<?php echo $html->css('forms'); ?>
//Dữ liệu trả về html
<link rel="stylesheet" type="text/css" href="/test/css/forms.css" />
//Ta cũng có thể khai báo nhiều file css cùng một lúc
<?php echo $html->css(array('forms','tables','menu')); ?>
//Dữ liệu trả về html
<link rel="stylesheet" type="text/css" href="/test/css/forms.css" />
<link rel="stylesheet" type="text/css" href="/test/css/tables.css" />
<link rel="stylesheet" type="text/css" href="/test/css/menu.css" />
$html->image(string $path, array $htmlAttributes = array());
Tạo ra một thẻ định dạng là image Mặc định nó sẽ chỉ tới thư mục
/app/webroot/img/
Ví dụ:
<?php echo $html->image('cake_logo.png', array('alt' => 'CakePHP'))?>
//Dữ liệu trả về html
<img src="/img/cake_logo.png" alt="CakePHP" />
$html->link(string $title, mixed $url = null, array $htmlAttributes = array(),
string $confirmMessage = false,boolean $escapeTitle = true);
Tạo ra một thẻ html link Các tham số truyền vào là
$title: Nhãn của đường link