Header Ads Widget

Quy tắc đặt tên, viết model, table trong CakePHP

Một số quy tắc đặt tên controller, model, tạo bảng trong CakePHP


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
VD: MyClass-> file class tương ứng :my_class.php

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.

VD:
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)
); 

- Bảng post_tags, bình thường thì có 2 cột post_id và tag_id làm khóa chính nhưng CakePHP là không phù hợp.
- 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.
- Có thể đặt tên bảng khác bằng cách sử dụng biến $useTable trong model
- Dùng thư viện Inflector có sẵn trong CakePHP để kiểm tra dạng số ít/số nhiều.
- 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.
VD: NewsCategory có nhiều News, bảng news sẽ có khóa ngoại đến bảng news_categories news_category_id.
- Các bảng liên kết được sử dụng trong quan hệ hasAnhBelongsToMany được đặt tên bằng cách kết nối các tên model theo thứ tự tên alphabeta.
- 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 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 thể sự dụng char(36) hoặc binary(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ự.

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

VD: Controller tên Products thì 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 đó (private).
VD:
<?php
        Class ProductsControllers extends AppController{
            function index(){
               //Mã lệnh ở đây
            }
            function _get_product(){
                //Mã lệnh ở đây
            }
            function viewProduct(){
                    $this->_get_product();
            }
        }
?>

VD: Controller NewsController với 2 function:
- View_all()
- View_detail()
Sẽ 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ó method view(), khi gọi action 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'); 
?>

Nhận xét