Hướng dẫn enum php 7 - và php 7

Giới thiệu

Chào mọi người, sau một tháng thì mình đã trở lại đây (hehe).

Nội dung chính

  • Giới thiệu
  • Enum là gì?
  • Laravel Enum
  • Cài đặt
  • Tạo Enum và sử dụng
  • Các phương thức hỗ trợ
  • Khởi tạo và sử dụng thể hiện của Enum
  • Validation Enum
  • Đa ngôn ngữ (Localization)
  • Kết luận
  • Tham khảo

Nội dung chính

  • Giới thiệu
  • Enum là gì?
  • Laravel Enum
  • Cài đặt
  • Tạo Enum và sử dụng
  • Các phương thức hỗ trợ
  • Khởi tạo và sử dụng thể hiện của Enum
  • Validation Enum
  • Đa ngôn ngữ (Localization)
  • Kết luận
  • Tham khảo

Nếu như các bạn đã từng làm việc với các ngôn ngữ như Java, C#, C++,... thì hẳn là các bạn không còn xa lại gì với

5. Còn đối với các bạn chưa từng nghe qua
5 thì không sao bởi vì trong bài viết này chúng ta sẽ cùng tìm hiểu về
5 và cách sử dụng
5 trong
9 với pagake
UserRole::Administrator  // return 0
0.

Enum là gì?

Laravel Enum

  • Cài đặt
  • Tạo Enum và sử dụng
  • Các phương thức hỗ trợ
  • Khởi tạo và sử dụng thể hiện của Enum

Validation Enum

  • Đa ngôn ngữ (Localization)
  • Kết luận
  • Tham khảo

  • Khởi tạo và sử dụng thể hiện của Enum

Validation Enum

Đa ngôn ngữ (Localization)

Laravel Enum

Cài đặt

Tạo Enum và sử dụng Laravel >= 5.4 và PHP >= 7.1

Các phương thức hỗ trợ

composer require bensampo/laravel-enum

Khởi tạo và sử dụng thể hiện của Enum

BenSampo\Enum\EnumServiceProvider

Tạo Enum và sử dụng

Các phương thức hỗ trợ

  • Khởi tạo và sử dụng thể hiện của Enum
  • Validation Enum
  • Đa ngôn ngữ (Localization)

Kết luận

Tham khảo

php artisan make:enum UserRole

Nếu như các bạn đã từng làm việc với các ngôn ngữ như Java, C#, C++,... thì hẳn là các bạn không còn xa lại gì với

5. Còn đối với các bạn chưa từng nghe qua
5 thì không sao bởi vì trong bài viết này chúng ta sẽ cùng tìm hiểu về
5 và cách sử dụng
5 trong
9 với pagake
UserRole::Administrator  // return 0
0.

5 là một kiểu dữ liệu đặc biệt, thường sử dụng cho việc định nghĩa một tập hợp cho các hằng số có giá trị cố định. Ví dụ như:

UserRole::Administrator  // return 0

Các ngày trong tuần (Monday, Tuesday, ... Sunday)

use App\Enums\UserRole;

Giới tính (Man, Woman, Other)

  • Các mùa trong năm (Spring, Summer, Autumn, Winter)

    $table->tinyInteger('role')->unsigned()->default(UserRole::Member);
    
  • .....

    public function isAdmin()
    {
        return $this->role === UserRole::Administrator;
    }
    
  • Lợi ích của

    5:

    if (Auth::user()->role === UserRole::Administrator) {
        User::create([
            'name' => 'Peter Paker',
            'nickname' => 'Spider Man',
            'role' => UserRole::Moderator,
        ]);
    }
    
  • Giảm các lỗi gây ra bởi chuyển đổi số hoặc nhập sai số.

Các phương thức hỗ trợ

  • Khởi tạo và sử dụng thể hiện của Enum: trả về một mảng chứa các key của Enum

    UserRole::getKeys()   // return ['Administrator', 'Moderator', 'Member']
    
  • Validation Enum: trả về một mảng chứa các giá trị của Enum

    BenSampo\Enum\EnumServiceProvider
    
    0
  • Đa ngôn ngữ (Localization): trả về key của

    $table->tinyInteger('role')->unsigned()->default(UserRole::Member);
    
    6

    BenSampo\Enum\EnumServiceProvider
    
    1
  • Kết luận: trả về giá trị của

    $table->tinyInteger('role')->unsigned()->default(UserRole::Member);
    
    7

    BenSampo\Enum\EnumServiceProvider
    
    2
  • Tham khảo: kiểm tra các key trong Enum có chứa

    $table->tinyInteger('role')->unsigned()->default(UserRole::Member);
    
    8 hay không

    BenSampo\Enum\EnumServiceProvider
    
    3
  • Nếu như các bạn đã từng làm việc với các ngôn ngữ như Java, C#, C++,... thì hẳn là các bạn không còn xa lại gì với

    5. Còn đối với các bạn chưa từng nghe qua
    5 thì không sao bởi vì trong bài viết này chúng ta sẽ cùng tìm hiểu về
    5 và cách sử dụng
    5 trong
    9 với pagake
    UserRole::Administrator  // return 0
    
    0.
    : kiểm tra các giá trị trong Enum có chứa
    $table->tinyInteger('role')->unsigned()->default(UserRole::Member);
    
    9 hay không. Tham số
    public function isAdmin()
    {
        return $this->role === UserRole::Administrator;
    }
    
    0 dùng để bật/tắt chế độ so sánh tuyệt đối (===), giá trị mặc định của
    public function isAdmin()
    {
        return $this->role === UserRole::Administrator;
    }
    
    0 là false.

    BenSampo\Enum\EnumServiceProvider
    
    4
  • 5 là một kiểu dữ liệu đặc biệt, thường sử dụng cho việc định nghĩa một tập hợp cho các hằng số có giá trị cố định. Ví dụ như: : trả về mô tả của
    $table->tinyInteger('role')->unsigned()->default(UserRole::Member);
    
    6 (giá trị trả về mặc định là key).

    BenSampo\Enum\EnumServiceProvider
    
    5

    Các ngày trong tuần (Monday, Tuesday, ... Sunday)

    BenSampo\Enum\EnumServiceProvider
    
    6
    BenSampo\Enum\EnumServiceProvider
    
    7
  • Giới tính (Man, Woman, Other): trả về một key ngẫu nhiên trong Enum. Phương thức này cực kì hữu dụng khi dùng trong việc

    public function isAdmin()
    {
        return $this->role === UserRole::Administrator;
    }
    
    4.

    BenSampo\Enum\EnumServiceProvider
    
    8
  • Các mùa trong năm (Spring, Summer, Autumn, Winter): trả về một giá trị ngẫu nhiên trong Enum. Phương thức này cực kì hữu dụng khi dùng trong việc

    public function isAdmin()
    {
        return $this->role === UserRole::Administrator;
    }
    
    4.

    BenSampo\Enum\EnumServiceProvider
    
    9
  • .....: Enum được trả về dưới dạng một mảng với key và value tương ứng

    php artisan make:enum UserRole
    
    0
  • Lợi ích của

    5:: trả về một mảng có dạng [value => description].

    php artisan make:enum UserRole
    
    1

    Giảm các lỗi gây ra bởi chuyển đổi số hoặc nhập sai số.

  • getInstance(string|int $enumValue): trả về một thể hiện của Enum: trả về một thể hiện của Enum

    php artisan make:enum UserRole
    
    2

Khởi tạo và sử dụng thể hiện của Enum

Điều này thật sự hữu ích vì bạn có thể tạo các thể hiện của Enum và sử dụng chúng như là các tham số cho các phương thức.

Có nhiều cách để khởi tạo một thể hiện của Enum:

php artisan make:enum UserRole
3

Với thể hiện của Enum thì bạn có thể truy cập trực tiếp đến các thuộc tính của Enum:

php artisan make:enum UserRole
4

Sử dụng thể hiện của Enum làm tham số cho các phương thức:

php artisan make:enum UserRole
5

Trong đó phương thức

if (Auth::user()->role === UserRole::Administrator) {
    User::create([
        'name' => 'Peter Paker',
        'nickname' => 'Spider Man',
        'role' => UserRole::Moderator,
    ]);
}
0 dùng để kiểm tra thể hiện Enum có bằng với các giá trị Enum hợp lệ không.

php artisan make:enum UserRole
6

Validation Enum

Bạn có thể validate

if (Auth::user()->role === UserRole::Administrator) {
    User::create([
        'name' => 'Peter Paker',
        'nickname' => 'Spider Man',
        'role' => UserRole::Moderator,
    ]);
}
1 và
if (Auth::user()->role === UserRole::Administrator) {
    User::create([
        'name' => 'Peter Paker',
        'nickname' => 'Spider Man',
        'role' => UserRole::Moderator,
    ]);
}
2 bằng cách sử dụng các
if (Auth::user()->role === UserRole::Administrator) {
    User::create([
        'name' => 'Peter Paker',
        'nickname' => 'Spider Man',
        'role' => UserRole::Moderator,
    ]);
}
3:

  • Bằng Rule:
    php artisan make:enum UserRole
    
    7 Đối với
    if (Auth::user()->role === UserRole::Administrator) {
        User::create([
            'name' => 'Peter Paker',
            'nickname' => 'Spider Man',
            'role' => UserRole::Moderator,
        ]);
    }
    
    4 thì mặc định chế độ so sánh tuyệt đối (===) sẽ được bật (
    if (Auth::user()->role === UserRole::Administrator) {
        User::create([
            'name' => 'Peter Paker',
            'nickname' => 'Spider Man',
            'role' => UserRole::Moderator,
        ]);
    }
    
    5). Bạn có thể tắt nó đi như sau:
    php artisan make:enum UserRole
    
    8
  • Bằng Rule Object:
    php artisan make:enum UserRole
    
    9 Tương tự, bạn có thể tắt chế độ so sánh tuyệt đối của
    if (Auth::user()->role === UserRole::Administrator) {
        User::create([
            'name' => 'Peter Paker',
            'nickname' => 'Spider Man',
            'role' => UserRole::Moderator,
        ]);
    }
    
    6:
    0 Lưu ý rằng, nếu bạn dùng
    if (Auth::user()->role === UserRole::Administrator) {
        User::create([
            'name' => 'Peter Paker',
            'nickname' => 'Spider Man',
            'role' => UserRole::Moderator,
        ]);
    }
    
    7 thì bạn cần phải
    $table->tinyInteger('role')->unsigned()->default(UserRole::Member);
    
    0
    if (Auth::user()->role === UserRole::Administrator) {
        User::create([
            'name' => 'Peter Paker',
            'nickname' => 'Spider Man',
            'role' => UserRole::Moderator,
        ]);
    }
    
    9 và
    UserRole::getKeys()   // return ['Administrator', 'Moderator', 'Member']
    
    0 tương ứng ở đầu mỗi file:
    1

Đa ngôn ngữ (Localization)

Ngoài việc sử dụng đa ngôn ngữ với phương thức

UserRole::getKeys()   // return ['Administrator', 'Moderator', 'Member']
1 trong phương thức
public function isAdmin()
{
    return $this->role === UserRole::Administrator;
}
8 ở trên, bạn còn có thể sử dụng tính năng đa ngôn ngữ của
UserRole::Administrator  // return 0
0.

Đầu tiên bạn cần tạo file

UserRole::getKeys()   // return ['Administrator', 'Moderator', 'Member']
4 trong các thư mục ngôn ngữ
UserRole::getKeys()   // return ['Administrator', 'Moderator', 'Member']
5 như sau:

  • UserRole::getKeys()   // return ['Administrator', 'Moderator', 'Member']
    
    6:
    2
  • UserRole::getKeys()   // return ['Administrator', 'Moderator', 'Member']
    
    7
    3

Sau đó bạn chỉ cần

UserRole::getKeys()   // return ['Administrator', 'Moderator', 'Member']
8 interface
UserRole::getKeys()   // return ['Administrator', 'Moderator', 'Member']
9 trong Enum
use App\Enums\UserRole;
6 là xong:

4

Các mô tả (description) của

5 sẽ tự động thay đổi giá trị tùy theo ngôn ngữ của hệ thống đang dùng.

Kết luận

Qua bài viết trên mình đã giới thiệu cho các bạn

5 cũng như cách sử dụng
5 trong
9 với package
UserRole::Administrator  // return 0
0. Hy vọng bài viết này sẽ có ích đối với các bạn

Tham khảo

https://github.com/BenSampo/laravel-enum