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

Tham khảo