Cakephp conventions cực kì quan trọng khi sử dụng cakephp framework giúp sử dụng được các tính năng sẵn có của cakephp. Quy tắc đặt tên không phải là bắt buộc, nhưng sử dụng đúng conventions sẽ giúp dự án được phát triển, bảo trì tốt nhất. Với mình sử dụng cakephp là bắt buộc phải sử dụng cakephp conventions, giờ cùng tìm hiểu các conventions trong cakephp nhé.
Tên class controller phải là số nhiều, đặt tên theo CamelCased
(Viết hoa tất cả các chữ cái đầu) và kết thúc bằng Controller
Ví dụ: UsersController, MenuLinksController...
Tên các method trong controller phải là các hành động và đặt tên theo quy tắc camelBacked
(Viết hoa các chữ cái đầu trừ từ đầu tiên)
Ví dụ: index, viewMe, edit...
Chúng ta nên tạo Controller tự động với cake/bake
// Tạo Users controller với bake
// File controller sẽ được tạo thư mục src/Controller
bin/cake bake controller Users
// Tạo controller với sub folder
// File controller sẽ được tạo thư mục src/Controller/Admin
bin/cake bake controller Users --prefix=Admin
Chú ý: Chỉ các phương thức public mới truy cập được từ router, các phương thức protected or private không truy cập được từ router.
Cakephp tự ánh xạ controller với url tương ứng mà bạn không cần phải khai báo router.
Ví dụ:
Url http://example.com/users
sẽ tự động matching với UsersController
và method là index()
.
Url http://example.com/menu-links/view-all
sẽ được tự động matching với MenuLinksController
và method là viewAll()
.
Tên file giống tên class và theo chuẩn PSR-4.
Ví dụ: Tên class là UsersControllers
thì tên file sẽ là UsersController.php
Tên table được đặt theo số nhiều, nếu table có nhiều từ thì cách nhau bởi underscore, nếu có nhiều từ cần đặt tên theo thứ tự alphabetically.
VD: users, menu_links, articles_tags, article_tags...
Tên columns đặt theo danh từ số it, nếu nhiều từ thì cách nhau bởi dấu underscore, tên column foreign key là tên bảng số it và _id
VD: Bảng users có các columns: id, uuid, username, password, first_name, last_name...
Bảng articles: id, user_id, title, content...
Bảng article_tags: id, article_id, tag_id...
Tên Table class là số nhiều giống tên bảng trong database, CamelCased, kết thúc bằng Table.
VD: UsersTable, ArticlesTable, ArticleTagsTable
Tên Entity class là danh từ số ít, giống tên bảng, CamelCased và không có hậu tố.
VD: User, Article, ArticleTag
Tên file template view dựa theo tên của method trong controller và được group trong folder là tên của controller.
VD: Function viewAll() trong controller ArticlesController sẽ matching với view templates/Articles/view_all.ctp
Function index trong controller ArticlesController sẽ matching với view templates/Articles/index.ctp
Example | articles | menu_links | Conventions |
---|---|---|---|
Tên bảng | articles | menu_links | Tên bảng số nhiều và theo quy tắc snake case |
Tên file | ArticlesController.php | MenuLinksController.php | Tên file số nhiều, giống tên class, có hậu tố .php |
Table | ArticlesTable | MenuLinksTable | Tên class table số nhiều, CamelCased, kết thúc là Table |
Entity | Article | MenuLink | Tên class entity số ít, CamelCased |
Controller | ArticlesController | MenuLinksController | Tên class controller số nhiều, CamelCased, kết thúc là Controller |
Behavior | ArticlesBehavior | MenuLinksBehavior | Tên class behavior số nhiều, CamelCased, hậu tố Behavior |
View | ArticlesView | MenuLinksView | Tên class view số nhiều, CamelCased, hậu tố View |
View template | Articles/index.ctp | MenuLinks/view_all.ctp | Tên view template dựa vào tên controller và method của nó |
Helper | ArticlesHelper | MenuLinksHelper | Tên class Helper số nhiều, CamelCased, hậu tố Helper |
Component | ArticlesComponent | MenuLinksComponent | |
Plugin | you/cakephp-articles | you/cakephp-menu-links |
Tóm lại sử dụng các cakephp convetions trên có ích gì? Nó giúp cakephp hiểu được một request từ http://example.com/articles
sẽ được mapching và gọi đến method index() của ArticlesController
, model Articles
cũng có thể sử dụng luôn. Chỉ cần đặt tên file, class, table đúng quy tắc mọi thứ còn lại cakephp framework đã làm sẵn cho bạn, quá ngon đúng không?