Convention coding trong Laravel - Tưởng không cần mà cần không tưởng!!!
Conventions là gì???
Thì conventions là tập hợp những nguyên tắc chung khi lập trình nhằm làm cho code dễ đọc, dễ hiểu, do đó dễ quản lý, bảo trì hơn. Cái này thì mỗi cty sẽ có quy định khác nhau nhưng đa phần sẽ theo các chuẩn PSR .
PSR là viết tắt của PHP Standards Recommendations , là những tiêu chuẩn khi code PHP, nó được cộng đồng PHP xây dựng và áp dụng theo.
Chuẩn PSR-0 nói về autoloading
Chuẩn PSR-1 về basic coding
Chuẩn PSR-2 về style coding
Chuẩn PSR-3 nói về logging
Chuẩn PSR-4 nói về autoloading : đây là phần cải tiến của PSR-0
Chuẩn PSR-7 nói về HTTP message
Các bạn có thể tìm hiểu thêm về các chuẩn này. trên mạng có rất nhiều bài viết về chuẩn này.
Ở khuôn khổ bài này thì sẽ có liên quan một chút ít về chuẩn PSR-2 về style coding.
Quy tắc đặt tên trong laravel
Sau đây sẽ là một vài quy tắc đặt tên được chấp nhận và đang được sử dụng bởi cộng đồng người dùng Laravel
Controller
Laravel dựa trên mô hình MVC nên sẽ không thể thiếu contreller. Và controller sẽ một vài quy tắc đặt tên sau:
- Tên controller phải bắt đầu bằng một danh từ tiếng Anh và viết hoa.
- Danh từ phải ở dạng số ít.
- Không chứa dấu cách.
- Luôn kết thúc bằng Controller.
Nên
UserController
Không nên
UsersController, user_controller, Users
Method của Controller
Chúng phải tuân theo các quy tắc tương tự như các method là phải viết theo quy tắc camelCase (chữ thường ký tự đầu tiên).
Ngoài ra, đối với các hoạt động CRUD thông thường, họ nên sử dụng một trong các tên phương thức sau.
Database
Database sẽ theo một quy tắc khác:
- Các bảng thường là chữ thường ngăn cách bỏi các dấu"_" (snake_case)
- Thường là số nhiều
Nên
posts, project_tasks, uploaded_images
Không nên
Posts, post, blogPosts
Bảng trung gian (pivot)
Bảng trung gian sẽ tuân thủ các quy tắc đặt tên chung của database và có thêm 1 quy tắc đó là sắp xếp tên 2 bảng chính theo alphabet
Nên
post_user, task_user
Không nên
users_posts, UsersPosts
Tên các cột trong một bảng
Tên cột trong bảng phải ở dạng chữ thường, và chữ in hoa (dấu gạch dưới giữa các từ). Bạn không nên tham chiếu đến tên bảng.
Nên
post_body, id, created_at
Không nên
blog_post_created_at, forum_thread_title, threadTitle
Khóa chính
Đơn giản mặc định là id
Khóa phụ
Thường là tên bảng bỏ số nhiều và thêm (_id) (là tên model viết thường)
Nên
user_id, post_id
Biến
Đặt biến thì sẽ có một số quy tắc sau:
- Dạng camelCase với chữ đầu viết thường
- Nếu biến là một mảng hoặc là tập tập hợp của nhiều mục thì phải chuyển về dạng số nhiều
Nên
$postId, $users = User::all()
Không nên
$all_banned_users, $Users
Model
Với model thì thì sẽ có một số quy tắc sau:
- Chứ cái đầu tiên của class là chữ hoa
- Phải là danh từ dạng số ít
Nên
Flight
Không nên
flight, Flights
Tôi khuyên bạn nên dùng lệnh php artisan make:model NameOfModel
để tạo file vì khi dùng lệnh này, hệ thống sẽ tự động tạo ra file migration.
Thuộc tính của Model
Chúng phải là chữ thường dạng snake_case. Chúng cũng phải tuân theo các quy ước tương tự như tên cột trong bảng.
Nên
$this->updated_at, $this->title
Không nên
$this->UpdatedAt, $this->blogTitle
Model Methods
Cũng giống như các Method khác trong Laravel project nó cũng sẽ được viết kiểu camelCase và chữ cái đầu viết thường
Nên
public function get(), public function getAll()
Không nên
public function GetPosts(), public function get_posts()
Quan hệ trong Model
hasOne hoặc belongsTo relationship (one to many)
Chúng phải ở dạng số ít và tuân theo các quy ước đặt tên giống như các phương pháp mô hình thông thường (camelCase, nhưng với chữ cái đầu tiên viết thường)
Nên
public function postAuthor(), public function phone()
hasMany, belongsToMany, hasManyThrough (one to many)
Giống như quy ước đặt tên của các Method, tuy nhiên, nó phải ở số nhiều.
Nên
public function comments(), public function roles()
Polymorphic relationships
Khá khó để đặt tên chính xác. Bạn có thể thử đặt tên theo phương pháp sau:
public function category()
{
return $this->morphMany('App\Category', 'categoryable');
}
Và Laravel sẽ mặc định cho rằng có một categoryable_id và categoryable_type.
Nhưng bạn có thể sử dụng các tham số tùy chọn khác cho morphMany( public function morphMany($related, $name, $type = null, $id = null, $localKey = null)) để thay đổi các giá trị mặc định.
Traits
Phải là tính từ tiếng anh
Nên
Notifiable, Dispatchable
Blade view files
Các tệp Blade phải ở dạng chữ thường, snake_case (gạch dưới giữa các từ).
Nên
all.blade.php, all_posts.blade.php