CƠ SỞ LÝ THUYẾT
TÌM HIỂU VỀ FRAMEWORK CAKEPHP
CakePHP là một framework mã nguồn mở và miễn phí dành cho lập trình web bằng ngôn ngữ PHP, giúp lập trình viên xây dựng ứng dụng web một cách hiệu quả.
CakePHP là tạo ra cách viết code có cấu trúc và nhanh chóng nhưng không mất đi tính linh hoạt của việc lập trình
CakePHP cung cấp đầy đủ công cụ cần thiết để lập trình viên tập trung vào việc áp dụng logic nghiệp vụ mà không phải lo lắng về các chi tiết nhỏ nhặt Nhờ vào các công cụ của CakePHP, lập trình viên có thể phát triển ứng dụng một cách hiệu quả hơn.
CakePHP sở hữu một đội ngũ phát triển và cộng đồng năng động, tạo ra giá trị lớn cho dự án Việc sử dụng CakePHP giúp lập trình viên tiết kiệm thời gian bằng cách giảm thiểu việc viết lại mã, đồng thời cung cấp cho ứng dụng web một nền tảng đã được kiểm tra kỹ lưỡng và liên tục phát triển.
Có khả năng tương thích PHP 4 và 5.Tích hợp các thao tác CRUD với CSDL: các thao tác Thêm/ Xem/ Sửa/ Xóa được hỗ trợ thực hiện tự động
CakePHP có khả năng tự hiểu và nhận diện các tên trường dữ liệu như created, modified, username, password Bằng cách tuân thủ quy ước đặt tên cho bảng và các trường dữ liệu, CakePHP hỗ trợ nhiều thao tác và đảm bảo tính toàn vẹn của dữ liệu.
Cung cấp khả năng tự sinh mã lệnh giúp lập trình viên tiết kiệm thời gian bằng cách tự động hóa những câu lệnh lặp đi lặp lại, từ đó nâng cao hiệu suất làm việc.
Bộ biên dịch yêu cầu với URL rất thân thiện và rõ ràng, dễ hiểu: giúp cho các yêu cầu theo dạng QueryString trở nên dễ đọc hơn
Tích hợp bộ kiểm tra dữ liệu đầu vào: VD như kiểm tra địa chỉ email phải có
Trong quá trình điền thông tin, cần lưu ý rằng không được để trường nào trống và số điện thoại không được chứa ký tự chữ Hệ thống cung cấp khuân mẫu dễ dàng và linh hoạt, cho phép người dùng thay đổi và áp dụng các khuân mẫu một cách nhanh chóng và hiệu quả.
Chúng tôi cung cấp các Helper hỗ trợ AJAX, Javascript, và HTML Form, giúp lập trình viên dễ dàng và nhanh chóng viết các thẻ HTML và Javascript với cú pháp chính xác.
Cung cấp các Component hỗ trợ Email, Cookie, Security, Session và Request Handling
Hỗ trợ Danh sách Điều khiển Truy cập linh hoạt
Cung cấp một thư viện giúp chống các lỗi liên quan đến Injection
Hỗ trợ bản địa hóa: cung cấp giải pháp và các thư viện liên quan để có thể thay đổi ngôn ngữ một cách linh hoạt và triệt để
Hoạt động trong bất kỳ thư mục web nào, với rất ít hoặc hoàn toàn không cần cấu hình Apache.
CẤU TRÚC CỦA FRAMEWORK CAKEPHP
Sau khi tải về CakePHP, bạn sẽ thấy ba thư mục chính: thư mục app dùng để phát triển ứng dụng, thư mục cake chứa mã nguồn lõi của CakePHP do các nhà phát triển cung cấp, và thư mục vendors dành cho các thư viện PHP bổ sung cần thiết cho ứng dụng của bạn Thư mục giải nén sẽ có phiên bản cakephp1x-1.2.6-0.
Thư mục app là nơi ta sẽ phát triển ứng dụng Hãy xem xét kỹ hơn thư mục app:
Thư mục Mô tả config
CakePHP sử dụng một số file cấu hình quan trọng để lưu trữ thông tin kết nối cơ sở dữ liệu, file cấu hình lõi và các file khác Thư mục controllers chứa các controller và components của ứng dụng, trong khi thư mục locale lưu trữ các file chuỗi cho việc quốc tế hóa Thư mục models chứa các model, behavior và nguồn dữ liệu của ứng dụng Thư mục plugins là nơi chứa các gói mở rộng, và thư mục tmp lưu trữ dữ liệu tạm thời như mô tả model, nhật ký và thông tin về session, tùy thuộc vào cấu hình của CakePHP.
Tất cả các class và thư viện khác cần được đặt trong thư mục này để có thể truy cập thông qua hàm App::import('vendor', 'name') Thư mục này hoàn toàn khác với thư mục vendors đã đề cập trước đó, điều này sẽ trở nên rõ ràng khi quản lý nhiều ứng dụng và cài đặt các hệ thống phức tạp Các file trình diễn như elements, trang báo lỗi, helpers, layouts và các file view cũng được lưu trữ trong thư mục views, trong khi thư mục webroot chứa các tài nguyên công khai của ứng dụng.
Khi cài đặt ứng dụng, thư mục gốc sẽ được tạo ra và các thư mục con sẽ được thiết lập để chứa các file CSS, hình ảnh và Javascript.
GIỚI THIỆU MÔ HÌNH MVC
Mô hình MVC (Model – View – Controller) là một kiến trúc quan trọng trong phát triển phần mềm, giúp tách biệt logic chương trình và giao diện người dùng Sự tách rời này cho phép người phát triển dễ dàng thay đổi logic hoặc chỉnh sửa giao diện mà không ảnh hưởng đến phần còn lại của ứng dụng, từ đó nâng cao tính linh hoạt và khả năng bảo trì của phần mềm.
CakePHP tuân theo mô hình thiết kế phần mềm chuẩn (design pattern) MVC 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ột yêu cầu đơn giản của mô hình MVC
Model là các lớp cung cấp dữ liệu, dịch vụ liên quan đến dữ liệu và business logic Chúng có thể là:
Đánh giá tính hợp lệ của dữ liệu
Đưa ra quyết định về nghiệp vụ
Thực hiện việc xử lý dữ liệu theo một quy trình (workflows)
Business logic primarily involves the processing of rules and policies related to operations and business workflows This layer incorporates various rule engines and integration engines, including Spring for Java and Flow3, Scarlet, Seasar, and PHPCrafty for PHP.
Dữ liệu miền đóng vai trò quan trọng trong việc cung cấp và lưu trữ thông tin, đồng thời chuyển đổi dữ liệu thành các định dạng khác nhau theo yêu cầu Tầng Persistent Layer chứa các lớp như PDO (PHP Data Object), Pear MDB2, PHP Doctrine, JDBC, JTA, JPA, Hibernate, JDO và các lớp thực hiện DAO Tương tự như cách mà Controller lấy trạng thái từ Model, Controller cũng cần cung cấp thông số cho Model để nhận lại trạng thái mong muốn, đồng thời phải định nghĩa một interface chung.
View là các lớp định nghĩa cách thức trình bày dữ liệu (không update dữ liệu) Trong các web framework, nó gồm 2 phần chính:
Template file định nghĩa cấu trúc và cách thức trình bày dữ liệu cho user
Logic xử lý dữ liệu là quá trình áp dụng dữ liệu vào cấu trúc trình bày, bao gồm việc kiểm tra và chuyển đổi định dạng dữ liệu sang dạng trung gian để hiển thị phù hợp với template hiện có Đồng thời, cần kiểm tra trạng thái và đặc tính của dữ liệu để lựa chọn cấu trúc hiển thị thích hợp Trong mô hình Passive View, việc lựa chọn cấu trúc hiển thị đôi khi cũng do Controller đảm nhận.
Vai trò của View cần thay đổi đặc biệt là các ứng dụng web thiên về View phức tạp khi vai trò của Model đã trở nên ổn định
Controller là các lớp điều khiển luồng ứng dụng, tiếp nhận dữ liệu từ người dùng thông qua HTTP header và chuyển tiếp đến các lớp xử lý yêu cầu Tùy thuộc vào thiết kế lớp, Controller thường bao gồm nhiều thành phần khác nhau.
Action: lớp xử lý các sự kiện chính, nơi dẫn đến application flow chủ yếu (Main Event Handler)
Request: xử lý một phần user input ở mức GET, POST và PUT
Session: xử lý một phần user input ở mức SESSION
Controller đóng vai trò quan trọng trong việc xử lý input từ người dùng, thực hiện các phép lọc và tính toán lựa chọn dựa trên kiến trúc và cấu hình của ứng dụng Nó xác định thành phần lớp chính để đáp ứng yêu cầu của người dùng, đồng thời điều khiển luồng ứng dụng Các thành phần xử lý form, như ActionForm trong Struts, thường thuộc về Controller, nơi cũng thực hiện chức năng xác thực form đơn giản nhằm đảm bảo kiểm soát hiệu quả luồng dữ liệu.
Khi xuất hiện các sự kiện phức tạp, Controller cần bổ sung các lớp mới để xử lý chúng theo quy trình độc lập, giúp phân tán mã nguồn khỏi lớp Action Là thành phần điều phối, Controller không nhất thiết phải tương tác với Model trước khi tương tác với View Nếu xảy ra lỗi ngoại lệ hoặc trạng thái request không mong muốn, Controller có thể phản ứng bằng cách chọn View trực tiếp.
Khi giao tiếp với Model, Controller sẽ tiến hành 2 cách:
extract dữ liệu hay state
Sau khi thu thập dữ liệu, View sẽ được lựa chọn theo cách hành xử thông thường Controller sẽ chuyển tiếp dữ liệu đến View để xử lý Do tính chất công việc của Controller khá phức tạp và đa dạng, việc tách Event Handler Controller thành các phần nhỏ hơn là cần thiết, thay vì xử lý tất cả các tín hiệu và đầu vào của người dùng trên cùng một lớp.
Ví dụ: Hình 1 ở trên 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à tì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 của máy chủ web sẽ kiểm tra URL (/cakes/buy) và chuyển giao yêu cầu này cho controller phù hợp để xử lý.
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ó thể sử dụng model để truy cập dữ liệu của ứng dụng, thường mô tả các bảng của cơ sở dữ liệu, nhưng cũng có thể mô tả các mục của LDAP, RSS feed hoặc file trên ổ cứng Trong ví dụ này, controller lấy thông tin về lần mua hàng gần nhất của Ricardo từ cơ sở dữ liệu thông qua model.
Sau khi controller hoàn tất việc xử lý, dữ liệu sẽ được chuyển đến view View tiếp nhận và hiển thị dữ liệu cho client, thường ở định dạng HTML trong CakePHP, nhưng cũng có thể là PDF, XML hoặc JSON tùy theo nhu cầu.
TẠO CƠ SỞ DỮ LIỆU TRONG CAKE PHP
Khi tạo cơ sở dữ liệu (CSDL) trên MySQL, trước khi sử dụng PHP, cần chú ý đến quy tắc đặt tên bảng của CakePHP Tên bảng và tên trường phải được đặt theo tiếng Anh.
Dựa vào các yêu cầu như trên, ta xây dựng một CSDL như sau:
Formats ( id, name, slug, description, created, modified, status)
Types ( id, name, slug, description, created, modified, status)
Locations ( id, name, slug, description, created, modified, status)
DVDs ( id, format_id, type_id, location_id, name, slug, image, website, imdb, rating, discs, episodes, created, modified, status)
Genres ( id, name, slug, created, modified, status)
DVDS_Genres ( id, dvd_id, genre_id)
Templates ( id, name, layout_name, description, image, created, modified, status)
Admins ( id, username, password, last_login, status)
Trong các bảng ở trên, các tên bảng và tên trường đã được đặt đúng theo quy ước Cụ thể, các quy ước đã được tuân theo là:
Tên bảng phải là số nhiều (có thêm S)
Các khóa chính của các bảng đều phải có tên là id
Với quan hệ 1-n, VD là quan hệ giữa Locations – DVDs, thì trong bảng DVDs phải có trường tên là location_id
Với quan hệ n-n, VD là quan hệ giữa Genres – DVDs, thì tạo một bảng mới với 2 trường dvd_id và genre_id
Status là biến dùng để nhận biết các bản ghi có được đăng lên hay không Status = 1 là có đăng, status = 0 tức là không đăng
Slug, nếu bạn chưa biết, thì nó là một giá trị để giúp cho người dùng dễ hiểu hơn
Khi sử dụng địa chỉ ID như http://www.abc.com/dvd/view/1, người đọc sẽ gặp khó khăn trong việc nhận diện nội dung Thay vào đó, việc sử dụng slug như http://www.abc.com/dvd/view/Bee_movie sẽ giúp người truy cập dễ dàng nhận biết phần nội dung mà họ đang xem.
CÀI ĐẶT CAKE PHP- XÂY DỰNG TÀI LIỆU KỸ THUẬT VỀ CÁCH XÂY DỰNG MỘT ỨNG DỤNG TRÊN FRAMEWORK CAKE PHP THEO MÔ HÌNH MVC
CakePHP cũng giống với một số framework về các cài đặt
Ta phải cài đặt một webserver để cho web hoạt động: Vertrigo, wampserver, apache
Sau khi download mã nguồn cakePHP về, ta tiến hành giải nén và tiến hành đổi tên thành ứng dụng mà ta đang tiến hành
Ví dụ: cakephp-cakephp1x-1.2.6-0 đổi thành eduportal sau đó copy folder eduportal vào trong thư mục www của webser của ta
Sau đó vào folder app/config chỉnh sửa 2 file sau:
Mở file core.php di chuyển đến dòng:
To enhance data encryption, replace the string 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi' in the configuration with a new string This string serves as a security salt, crucial for the encryption process Remember to save the updated file for effective implementation.
Đổi tên fiel database.php.default thành database.php
Sau đó di chuyển đến dòng: class DATABASE_CONFIG { var $default = array(
'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', < localhost 'login' => 'root', 'vertrigo', 'test_cake', '',
Mở Vertrigo lên Vào địa chỉ: http://127.0.0.1/phpmyadmin/ sau đó tạo một database có tên test_cake
Sau đó truy cập vào địa chỉ http://127.0.0.1/eduportal Nếu bạn thấy xuất hiện như hình sau thì bạn đã cài đặt cakePHP kết nối đến database thành công
Bước tiếp theo, ta tạo các table cho database test_cake đúng theo qui tắt tạo table trong cake Ta có Table: users có nội dung sau
2.Xây dựng một ứng dụng trên Framework cakephp theo mô hình MVC:
Ta tiến hành xây dựng một framework cakePHP theo mô hình MVC với database test_cake Tạo các lớp Model, View, Controller bằng cake bake console:
To configure the environment variable for Cake Bake to function properly, right-click on My Computer, select Properties, navigate to the Advanced tab, and click on the Environment Variables button A dialog box will then appear.
Chọn new một hộp thoại xuất hiện:
Gõ vào nội dung như trên trong đó:
C:\ProgramFiles\VertrigoServ\Php;C:\ProgramFiles\VertrigoServ\www\eduporta l\cake\console C:\ProgramFiles\VertrigoServ\Php chứa một số file thực thi của PHP
C:\ProgramFiles\VertrigoServ\www\eduportal\cake\console chứa console của cakePHP
Bước 2: Vào StartRun gõ cmddi chuyển đến đường dẫn
C:\ProgramFiles \VertrigoServ \www \eduportal\cake\console Gõ lệnh: cake bake all
Gõ 1 chọn table users để tạo các Model, View, Controller
Bây giờ ta vào đường dẫn:
C:\Program Files\VertrigoServ\www\eduportal\app\models thấy 1 file user.php nội dung file đó như sau: