1. Trang chủ
  2. » Luận Văn - Báo Cáo

kl huynh nguyen duy

111 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Khóa luận tốt nghiệp: Phân tích thiết kế hệ thống CakePHP
Tác giả Huỳnh Nguyễn Duy, Nguyễn Thanh Hoàng
Người hướng dẫn Lê Mậu Long, Giảng Viên
Trường học Đại học Tôn Đức Thắng
Chuyên ngành Kỹ thuật phần mềm
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2023
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 111
Dung lượng 4,5 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

+ 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 2

NH ẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN



Trang 3

NH ẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN



Trang 4

Lờ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 5

1.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 6

3.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 7

3.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 8

Tài liệu tham khảo Trang 111

Trang 9

Danh 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 10

L Ờ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 11

CHƯƠ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

 Tng 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 13

MVC 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 14

model để 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 17

CakePHP 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 18

Ngoà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 19

Cá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 21

củ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 22

nế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 24

CREATE 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 26

Chỉ 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 27

Trong 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 28

sẽ 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 32

saveAll(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 33

Bâ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 34

Ví 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 36

chỉ đị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 37

gử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 39

tiề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 40

Ví 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

Ngày đăng: 30/10/2022, 04:56

TÀI LIỆU CÙNG NGƯỜI DÙNG