Cakephp conventions

  • August 6, 2022
  • 554

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

Controller Conventions

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.

URL Considerations for Controller Names

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().

File and Class Name Convention

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

Database Conventions

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

Model Conventions

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

View Conventions

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

Cakephp conventions

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?