Trong phần đầu tiên này bao gồm:

  • Giới thiệu sơ lượt về cakephp.
  • Cấu trúc Cakephp framwork.
  • Quy tắc cần nắm bắt.
  • Hướng dẫn cài đặt & config một số module cho 1 vài webserver.

GIỚI THIỆU VỀ CAKEPHP

– Thông tin chung: Cakephp là 1 framwork thuần PHP. Nó xây dựng sẳn cấu trúc cũng như các thư viện cho người lập trình dễ dàng coding, nâng cấp project theo mô hình M-V-C đồng thời tiết kiệm thời gian và tránh việc trùng lặp code quá nhiều. Đặt biệt đây là framwork mở miễn phí được cộng đồng đánh giá cao.

– Tính năng ưu việt có trong Cakephp Framwork:

• Tương thích PHP4 và PHP5
• Xây dựng theo mô hình MVC
• Đa ngôn ngữ
• Sinh code tự động dựa trên database.
• Lưu tạm – Caching (ảnh hưởng lớn đến toàn bộ project)
• Phân quyền (ACL)
• Kiểm tra ràng buộc dữ liệu thông qua model
• Xây dựng nhiều thư viện hỗ trợ cho View (dc gọi Helper) như: Ajax, HTML Form, Javascript…
• Xây dựng nhiều thư viện hỗ trợ cho Controller (dc gọi Component): Email, Security, Session, Cookies, Request Handling
• Dễ dàng viết thêm thư viện hỗ trợ, liên kết với ứng dụng khác thông qua vendors (thích nhất cái này)
• Đa giao diện (Hơi khó khăng trong việc phân chia layout)
• Hỗ trợ nhiều hệ quản trị CSDL
• Kiểm tra dữ liệu(bắt lỗi trên form) thông qua model. Tuy nhiên ít dc sử dụng sao khi sử dụng sẽ hiểu
• Cho phép toạn link thân thiện (giấu link chính ><)
• Dễ dàng cofig trong database cũng như core của framwork.

CẤU TRÚC CAKEPHP

1. CẤU TRÚC THƯ MỤC

Sau khi tải và giải nén CakePHP, bạn có thể thấy các files và thư mục sau :
app: là nơi chứa mã nguồn ứng dụng của bạn (phần này quang trọng)
cake: là nơi chứa mã nguồn của CakePHP. Bạn không nên chỉnh sửa các files trong thư mục này nếu bạn không hiểu rõ về chúng
vendors: chứa ứng dụng của bên thứ 3, phục vụ cho ứng dụng của bạn
plugins: chứa các thành phần mở rộng dùng cho ứng dụng

so do
Ghi chú :
Config Chứa file cấu hình hệ thống
Controllers Chứa các controller và component
Locale Chứa file ngôn ngữ , phục vụ cho ứng dụng đa ngôn ngữ
Molels Chứa file Model và behavor, datasource
Plugins Chứa các gói mở rộng
TmpThư mục tạm của ứng dụng
Vendors Chứa ứng dụng của bên thứ 3
Views Chứa các file giao diện
Webroot Chứa tài liệu (hình ảnh,file..), file CSS , file javascript…
2. CẤU TRÚC MODEL

Cũng như các PHP framework khác, CakePHP hoạt động theo mô hình MVC. Mô hình MVC trong CakePHP chia ứng dụng ra ba phần chính: Model, View và Controller, việc phân tách ứng dụng rõ ràng như vậy sẽ giúp bạn tách bạch các phần xử lý riêng biệt cho website của bạn, nó giúp cho code của bạn trong sáng hơn, dễ lập trình, dễ quản lý, chỉnh sửa, nâng cấp. Trong đó:

–          Model: mô tả dữ liệu của ứng dụng. Trên Model ta có thể thiết lập các ràng buộc dữ liệu, quan hệ giữa các bảng. Model giao tiếp với database, bạn sẽ viết các query cũng như các xử lý logic  ở đây.

–          View: đảm nhận việc hiển thị thông tin đã được xử lý gới đến từ Controller, View còn được hiểu nôm na là nơi chứa các file html của bạn để hiển thị cho nguời xem.

–          Controller: xử lý và điều hướng các yêu cầu của client, Controller nơi bạn trực tiếp viết các xử lý lấy các request từ url và form để thao tác trực tiếp với Model, sau đó dùng View để hiển thị ra

Ta có mô hình cơ bản như sau:

Mo hinh MVC

Mô Hình MVC

Cách thức hoạt động:

  •     Đầu tiên client sử dụng web browser để gởi yêu cầu đến ứng dụng bằng cách gõ hoặc click vào một đường link liên kết có dạng sau:

http://{Domain}.com/{Application}/{Controller}/{Action}/{Parameter 1, etc.}

  •     Bộ phận điều vận Dispatcher (là một thành phần của CakePHP) sẽ kiểm tra phần tử để xác định controller nào sẽ thực thi  và gởi yêu cầu tới controller tương ứng
  •     Khi yêu cầu được gởi đến Controller, nó sẽ làm một vài thao tác luận lí cần thiết, có thể nó sẽ xử lý ngay tại Controller hoặc sử dụng Model tương ứng để truy xuất dữ liệu. Dữ liệu ở đây có thể là các record trong table của một database, hoặc một dạng khác.
  •     Sau khi lấy được dữ liệu, Controller sẽ đưa dữ liệu này ra View và View này có nhiệm vụ chuẩn bị đưa dữ liệu đầu ra. View có thể chuẩn bị dữ liệu ở dạng HTML, PDF, tài liệu XML hoặc một đối tượng JSON, cuối cùng là view sẽ được hiển thị trên trình duyệt.

CÁC QUY TẮC TRONG CAKEPHP

Ở mỗi phiên bản khác nhau của Cakephp sẽ có mở rộng thêm quy tắc mới nên trong bài này chỉ nói về quy tắc trong cakephp 2.x

Cách đặt tên file, tên lớp

– Tên file sử dụng chữ thường, dùng dấu “_” để phân cách các từ
– Tên lớp dùng CamelCased (viết hoa chữ cái đầu tiên của từ)
Ví dụ : ta có tên lớp là MyClass-> file class tương ứng :my_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 dụng CakePHP :
CakePHP Framework - các quy ước cơ bản
Các qui ước về Model và CSDL
– Tên các lớp model được đặt ở dạng số ít và việc viết hoa thường tuân theo CamelCased
Ví dụ: Person, BigPerson và ReallyBigPerson.
– CakePHP không hỗ trợ khóa chính gồm nhiều cột. Nếu bạn muốn thao tác trực tiếp kết nối (join) các bảng, hãy truy vấn trực tiếp hoặc thêm một khóa chính thay cho khóa nhiều cột.
Ví dụ:
  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));
– Lẽ ra trong table post_tags, bình thường thì 2 cột post_id và tag_id ta có thể cho nó làm khóa chính nhưng CakePHP không chấp nhận điều này.
– Tên bảng tương ứng với các model của CakePHP ở dạng số nhiều và sử dụng gạch dưới (_) tên bảng tương ứng với các model ở trên là people, big_people, và really_big_people.
– Tuy nhiên, bạn vẫn có thể đặt tên bảng khác đi và cho CakePHP biết điều này thông qua biến$useTable trong model (các bài viết tiếp theo sẽ có ví dụ).
– Bạn có thể dùng thư viện Inflector có sẵn trong CakePHP để kiểm tra dạng số ít/số nhiều của các từ.
– Các khóa ngoại trong các quan hệ hasMany, belongsTo, hasOne có tên mặc định là số ít của tên bảng kèm theo _id ở cuối cùng.
Ví dụ với quan hệ NewsCategory có nhiều News, bảng news sẽ có khóa ngoại đến bảngnews_categories là news_category_id.
– Các bảng liên kết được sử dụng trong quan hệ hasAnhBelongsToMany(viết tắt là HABTM – quan hệ nhiều nhiều) được đặt tên bằng cách kết nối các tên model theo thứ tự abc, vì vậy tên đúng sẽ là apples_zebras chứ không phải là zebras_apples.
– Do đó, ta phải thêm một khóa khác có tên là id
– Khóa chính mặc định trong CakePHP là cột id, kiểu int, tự tăng. Tuy nhiên, bạn cũng có thể định nghĩa lại khóa chính cho bảng thông qua biến $primaryKey trong model.
– Thay cho việc sử dụng kiểu int, auto-increment làm khóa chính, bạn có thể sự dụngchar(36)hoặcbinary(36), khi đó CakePHP sẽ tự động tạo ra UUIDs để làm khóa khi ta thêm mới một record. UUID là một chuỗi gồm 32 byte, tương ứng với 36 ký tự.
Ví dụ :550e8400-e29b-41d4-a716-446655440000
 
Qui ước về Controller :
– Tên lớp của controller đặt theo dạng số nhiều,
– Tuân theo CamelCased và cuối tên phải có chữ “Controller”.Ví dụ: ta có Controller tênProductsthì có class Controller như sau :
  <?php
              Class ProductsController extends AppController{
              //Mã lệnh ở đây
          }
  ?>
– Khi một phương thức trong Controller được đặt tên bắt đầu với với dấu “_”ở phía trước, bạn sẽ không thể truy xuất nó từ bên ngoài mà chỉ có thể truy xuất trong controller đó (cái này gọi là private).
Ví dụ:
  <?php
          Class ProductsControllers extends AppController{
              function index(){
                 //Mã lệnh ở đây
              }
 
              function _get_product(){
                  //Mã lệnh ở đây
              }
 
              function viewProduct(){
                      $this->_get_product();
              }
          }
  ?>
Kết quả hiển thị như sau:
index() : public function
_get_product() : private function
Mô tả hoạt động :
http://localhost/products: function index() :run
http://localhost/products/_get_product: function _get_product() :not run
http://localhost/products/viewProduct: function _get_product() :run
Ví dụ :
Ta có controller NewsController với 2 function:
– View_all()
– View_detail()
Thì ta phải có 2 file tương ứng :
– View_all.ctp
– View_detail.ctp
Đặt trong thư mục app/view/news
– Mặc định, nếu trong controller NewsController có methodview(), khi gọi actionviewtrên trình duyệt (http://localhost/news/view) thì Controller sẽ tìm file view.ctp trong app/views/news/view.ctp
– Tuy nhiên, bạn có thể gọi một file view khác không phải là view.ctp bằng lệnh
  <?php
  $this->render('ten_view');
  ?>
Ví dụ về mặc định :

 

<?php

  Class NewsController extends AppController{
 
     function view(){
      
     }
  }
  ?>
-Truy cập :http://localhost/news/view->load file :view.ctptrong thư mục app/views/news/
Ví dụ về load 1 file view khác :

 

<?php

  Class NewsController extends AppController{
 
      function view(){
          ….
        $this->render(“view_demo”);
      }
  }
  ?>
– Truy cập :http://localhost/news/view-> load file :view_demo.ctp trong thư mụcapp/views/news/

HƯỚNG DẪN CÀI ĐẶT VÀ CONFIG

Yêu cầu hệ thống :

  • Hệ điều hành Windown hoặc Linux
  • Hệ quản trị CSDL MySQL
Chuẩn bị cài đặt :
Tải phiên bản CakePHP mới nhất.
– Giải nén, cho vào thư mục của web server
– Trong ví dụ này thư mục webser góc của tôi là :C://xampp/htdocs
– Vậy ta có cấu trúc như sau :C://xampp/htdocs/cakephp
Cài đặt CakePHP thành công :
– Chmod thư mục app/tmpthành0777(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’, ‘DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi2010‘ );
Thay đổi giá trị của dòng Configure::write(‘Security.cipherSeed’, ‘768593096574535424967496836452011‘);
mod error
– Tạo csdl với tên:cake_test
– Mở file app/config/database.php, điền như sau:
mod database
Bạn cần thay đổi các mục in đậm cho phù hợp với cấu hình trên máy bạn.
Sau khi thành công sẽ ra như thế lài:
succ
Nếu chưa cấu hình như trên thì sẽ bị lỗi như thế lài lúc dó nhớ config lại như trên
error cakephp