NTM Solutions

Bài đăng nổi bật

🚀 Laravel 12 (2026) — Từ PHP Core đến Full Stack📘

Nếu cập nhật theo Laravel 12 LTS (2026) thì mình sẽ chia thành các phần như sau để người học đi từ PHP Core → Laravel → Triển khai dự án th...

Chủ Nhật, 30 tháng 8, 2026

📘 Laravel 12 (2026) — BÀI 34 — EVENT & LISTENER TRONG LARAVEL

Ở bài trước, chúng ta đã học Observer.

Observer cho phép chúng ta phản ứng khi một Eloquent Model xảy ra sự kiện:

Post
 │
 ├── created
 ├── updated
 ├── deleted
 └── restored
        │
        ▼
   PostObserver

Ví dụ:

public function created(Post $post): void
{
    logger("Post {$post->id} đã được tạo");
}

Observer rất hữu ích.

Tuy nhiên, trong ứng dụng thực tế sẽ có những sự kiện không nhất thiết phải gắn trực tiếp với Model.

Ví dụ:

  • User đăng ký tài khoản → gửi email chào mừng.

  • Đơn hàng được đặt → gửi thông báo.

  • Bài viết được publish → ghi log.

  • Thanh toán thành công → cập nhật dữ liệu.

  • User đăng ký → tạo một số dữ liệu liên quan.

  • Post được publish → thông báo cho người quản trị.

Lúc này chúng ta có thể sử dụng:

Event & Listener

Mô hình:

Một hành động xảy ra
        │
        ▼
      Event
        │
        ▼
    Listener
        │
        ├── Gửi email
        ├── Ghi log
        ├── Gửi notification
        └── Xử lý dữ liệu

Thứ Năm, 27 tháng 8, 2026

📘 Laravel 12 (2026) — BÀI 33 — OBSERVER TRONG LARAVEL

Trong các bài trước, chúng ta đã làm việc trực tiếp với Eloquent:

$user = User::create([
    'name' => 'Nguyễn Văn A',
    'email' => 'a@gmail.com',
    'password' => bcrypt('123456'),
]);

Hoặc:

$user->update([
    'name' => 'Trần Văn B',
]);

Nhưng sẽ có trường hợp:

Mỗi khi User được tạo, cập nhật hoặc xóa thì ứng dụng phải tự động thực hiện thêm một công việc nào đó.

Ví dụ:

  • User mới được tạo → ghi Log.

  • Post mới được tạo → tự tạo slug.

  • Post bị xóa → xóa luôn ảnh liên quan.

  • User được cập nhật → ghi lại lịch sử thay đổi.

  • Post được publish → thực hiện một xử lý bổ sung.

Nếu viết tất cả những logic này trong Controller, code sẽ rất nhanh trở nên khó quản lý.

Đây là lúc Observer phát huy tác dụng.

Thứ Tư, 26 tháng 8, 2026

📘 Laravel 12 (2026) — BÀI 32 — LOCAL SCOPE & GLOBAL SCOPE TRONG ELOQUENT

Trong các bài trước, chúng ta thường viết Query trực tiếp trong Controller:

$users = User::where('is_active', true)
    ->where('role', 'user')
    ->latest()
    ->paginate(10);

Cách này hoàn toàn đúng.

Nhưng khi dự án lớn lên, những điều kiện truy vấn giống nhau sẽ xuất hiện ở rất nhiều Controller.

Ví dụ:

User::where('is_active', true)->get();
User::where('is_active', true)->latest()->get();
User::where('is_active', true)->paginate(10);

Lúc này chúng ta có thể đưa các điều kiện truy vấn thường dùng vào Scope.

Laravel 13 hỗ trợ hai loại chính:

  • Local Scope

  • Global Scope

Local Scope chỉ được sử dụng khi chúng ta chủ động gọi nó.

Global Scope tự động được áp dụng vào các query của Model. Laravel cũng sử dụng cơ chế Global Scope cho Soft Delete.

Chủ Nhật, 23 tháng 8, 2026

📘 Laravel 12 (2026) — BÀI 31 — ACCESSOR & MUTATOR TRONG ELOQUENT

Trong các bài CRUD trước, chúng ta đã làm việc trực tiếp với dữ liệu:

$user->name
$user->email
$user->role

Nhưng trong dự án thực tế, đôi khi chúng ta muốn biến đổi dữ liệu trước khi hiển thị hoặc xử lý dữ liệu trước khi lưu vào database.

Ví dụ:

  • Database lưu nguyen van a

  • Website muốn hiển thị Nguyen Van A

Hoặc:

  • Người dùng nhập NGUYEN VAN A

  • Database chỉ lưu nguyen van a

Đây chính là lúc Accessor và Mutator phát huy tác dụng.

Laravel 13 sử dụng cách khai báo hiện đại thông qua Illuminate\Database\Eloquent\Casts\Attribute.

Facebook Youtube RSS