NTM Solutions

Thứ Sáu, 31 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 22 — Login

Ở bài trước, chúng ta đã cài đặt Laravel Breeze và có thể đăng ký, đăng nhập vào hệ thống.

Tuy nhiên, khi người dùng nhập Email và Password rồi nhấn Login, phía sau Laravel đã thực hiện những công việc gì?

Trong bài này, chúng ta sẽ tìm hiểu quy trình đăng nhập, Session và cách lấy thông tin người dùng đang đăng nhập để sử dụng trong ứng dụng.


Login là gì?

Login (Đăng nhập) là quá trình xác thực người dùng.

Người dùng cung cấp:

  • Email

  • Password

Laravel sẽ kiểm tra thông tin này với dữ liệu trong cơ sở dữ liệu.

Nếu hợp lệ:

  • Tạo Session 

  • Ghi nhớ người dùng.

  • Cho phép truy cập các trang được bảo vệ.

Nếu không hợp lệ:

  • Trả về trang đăng nhập.

  • Hiển thị thông báo lỗi.

Thứ Năm, 30 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 21 — Laravel Breeze

Errors log:

Sau khi cài Breeze file route bị ghi đè (mất dữ liệu)

-> sửa lại thêm middleware (để Breeze xác thực mới cho vào link)

Ví dụ:

use App\Http\Controllers\PostController;
use App\Http\Controllers\CategoryController;

Route::middleware('auth')->group(function () {

    Route::resource('posts', PostController::class);

    Route::resource('categories', CategoryController::class);

});

và giữ lại:

require __DIR__.'/auth.php';

ở cuối file.


Đến thời điểm này, chúng ta đã có thể xây dựng một Blog CMS với các chức năng như:

  • Quản lý Post

  • Category

  • Tag

  • Relationship

  • Form

  • Validation

  • Upload File

Tuy nhiên, ứng dụng vẫn còn thiếu một thành phần rất quan trọng:

Hệ thống đăng nhập và quản lý người dùng.

Laravel cung cấp một giải pháp chính thức để xây dựng Authentication hiện đại mang tên Laravel Breeze.

Thứ Hai, 27 tháng 7, 2026

🚀 Node.js LTS (2026) — Bài 11: Callback - Nền tảng của lập trình bất đồng bộ 🔄

"Trước khi có Promise và Async/Await, Callback chính là cách Node.js xử lý các tác vụ bất đồng bộ. Hiểu Callback sẽ giúp bạn hiểu vì sao JavaScript hiện đại được thiết kế như ngày nay."


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu Callback là gì.

  • Phân biệt Callback đồng bộ và bất đồng bộ.

  • Biết cách truyền Callback vào hàm.

  • Hiểu Callback Hell là gì.

  • Biết khi nào nên dùng Callback.

  • Hiểu vì sao Promise và Async/Await ra đời.

🎯Web Layout 2026 - Phần 2 # Bài 05 — CSS Reset: Đồng bộ giao diện trên mọi trình duyệt

Sau khi hoàn thành phần HTML5 Enterprise, chúng ta đã có thể xây dựng cấu trúc website chuẩn. Tuy nhiên, nếu mở cùng một trang trên Chrome, Firefox, Edge hoặc Safari, bạn sẽ thấy giao diện có thể không giống nhau.

Nguyên nhân là mỗi trình duyệt đều có một bộ CSS mặc định (User Agent Stylesheet) riêng.

Để giải quyết vấn đề này, lập trình viên thường bắt đầu dự án bằng CSS Reset.


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu CSS Reset là gì.

  • Biết vì sao cần Reset CSS.

  • Phân biệt CSS Reset và Normalize CSS.

  • Tự xây dựng một bộ Reset hiện đại.

  • Chuẩn bị nền tảng cho Responsive Design và Design System.


CSS Reset là gì?

CSS Reset là tập hợp các quy tắc CSS giúp đưa tất cả các trình duyệt về một điểm xuất phát giống nhau.

Ví dụ:

Chrome có thể đặt:

body {
    margin: 8px;
}

Trong khi trình duyệt khác có thể xử lý khoảng cách hoặc kích thước mặc định khác nhau.

Điều này khiến cùng một mã HTML hiển thị không đồng nhất.

Chủ Nhật, 26 tháng 7, 2026

🎯Web Layout 2026 - Phần 1 # Bài 04 — Accessibility & ARIA: Xây dựng Website thân thiện với mọi người dùng

Một website chuyên nghiệp không chỉ đẹp và nhanh, mà còn phải dễ sử dụng đối với tất cả mọi người, bao gồm:

  • Người khiếm thị.

  • Người khiếm thính.

  • Người lớn tuổi.

  • Người gặp khó khăn về vận động.

  • Người chỉ sử dụng bàn phím.

  • Người dùng thiết bị di động.

Đó chính là mục tiêu của Accessibility (A11y).

HTML5 đã hỗ trợ rất nhiều tính năng Accessibility, và khi kết hợp với ARIA (Accessible Rich Internet Applications), chúng ta có thể xây dựng các website thân thiện với mọi người dùng.

🚀 Node.js LTS (2026) — Bài 10: Streams & Buffer - Xử lý dữ liệu hiệu quả trong Node.js 🌊

"Nếu phải đọc một file 20 GB, bạn sẽ tải toàn bộ vào RAM hay đọc từng phần nhỏ? Câu trả lời chính là Buffer và Stream - hai nền tảng giúp Node.js xử lý dữ liệu cực kỳ hiệu quả."


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu Buffer là gì.

  • Hiểu Stream là gì.

  • Biết các loại Stream trong Node.js.

  • Thành thạo Readable Stream và Writable Stream.

  • Biết sử dụng pipe().

  • Hiểu vì sao Stream giúp Node.js xử lý file lớn với hiệu năng cao.


Buffer là gì?

Máy tính chỉ hiểu dữ liệu dưới dạng byte.

Node.js sử dụng Buffer để lưu trữ dữ liệu nhị phân (Binary Data).

Ví dụ:

  • File ảnh

  • Video

  • Âm thanh

  • PDF

  • File ZIP

  • Dữ liệu truyền qua mạng

đều được xử lý bằng Buffer.

🚀 Laravel 12 (2026) — Bài 20 — Upload File

Ở bài trước, chúng ta đã học cách Validation dữ liệu trước khi lưu vào cơ sở dữ liệu.

Tuy nhiên, một Blog hoặc CMS không chỉ có văn bản mà còn cần hình ảnh minh họa cho bài viết, ảnh đại diện người dùng hoặc các tệp đính kèm.

Laravel cung cấp hệ thống Storage giúp việc tải lên (Upload) và quản lý tệp trở nên đơn giản, an toàn và dễ mở rộng.

Trong bài này, chúng ta sẽ xây dựng chức năng tải ảnh đại diện cho Post.


Upload File là gì?

Upload File là quá trình người dùng gửi tệp từ máy tính lên máy chủ.

Ví dụ:

  • Ảnh bài viết.

  • Avatar người dùng.

  • File PDF.

  • Video.

  • Tài liệu Word.

Laravel sẽ tiếp nhận tệp thông qua đối tượng Request.

Thứ Bảy, 25 tháng 7, 2026

🚀 Node.js LTS (2026) — Bài 09: Events - Lập trình hướng sự kiện với EventEmitter ⚡

"Node.js hoạt động dựa trên mô hình hướng sự kiện (Event-Driven). Hiểu EventEmitter là bước quan trọng để xây dựng các ứng dụng bất đồng bộ hiệu quả."


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu Event là gì.

  • Biết EventEmitter hoạt động như thế nào.

  • Thành thạo các hàm:

    • on()

    • once()

    • emit()

    • off()

  • Truyền dữ liệu qua sự kiện.

  • Biết cách xây dựng hệ thống Publisher–Subscriber (Pub/Sub) đơn giản.

🚀 Laravel 12 (2026) — Bài 19 — Validation

Dưới đây là Bài 19, tiếp nối trực tiếp sau Request

Bài này sử dụng luôn các bảng và Model đã có trong khóa học (users, posts, categories, tags, profiles, countries), không tạo thêm cấu trúc dữ liệu mới.

Ở bài trước, chúng ta đã học cách lấy dữ liệu từ người dùng thông qua Request.

Tuy nhiên, dữ liệu người dùng nhập vào không phải lúc nào cũng hợp lệ. Họ có thể để trống tiêu đề, nhập email sai định dạng hoặc chọn một Category không tồn tại.

Laravel cung cấp Validation để kiểm tra dữ liệu trước khi lưu vào cơ sở dữ liệu.

Validation là một trong những tính năng được sử dụng nhiều nhất trong mọi dự án Laravel.


Validation là gì?

Validation là quá trình kiểm tra dữ liệu đầu vào.

Ví dụ:

  • Tiêu đề không được để trống.

  • Nội dung phải có ít nhất 20 ký tự.

  • Email phải đúng định dạng.

  • Category phải tồn tại.

  • Số điện thoại không được vượt quá số ký tự quy định.

Nếu dữ liệu không hợp lệ, Laravel sẽ tự động quay lại Form và hiển thị lỗi.

Thứ Sáu, 24 tháng 7, 2026

🚀 Node.js LTS (2026) — Bài 08: OS - Khám phá hệ điều hành với Node.js 🖥️

"Để xây dựng ứng dụng thông minh, đôi khi bạn cần biết nó đang chạy trên hệ điều hành nào, có bao nhiêu CPU, bao nhiêu RAM và thư mục Home ở đâu. Module os giúp Node.js làm được điều đó."


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu module os là gì.

  • Lấy thông tin hệ điều hành.

  • Kiểm tra CPU, RAM và kiến trúc máy.

  • Biết thư mục Home, Temp.

  • Phân biệt các hàm thường dùng trong module os.

  • Ứng dụng os trong các dự án thực tế.

🚀 Laravel 12 (2026) — Bài 18 — Request

Sau khi đã học xong Eloquent ORM và các Relationship, chúng ta sẽ chuyển sang phần Form.

Trong mọi ứng dụng web, người dùng luôn gửi dữ liệu lên máy chủ thông qua biểu mẫu (Form), URL hoặc API. 

Laravel cung cấp lớp Request để tiếp nhận và xử lý những dữ liệu này một cách đơn giản và an toàn.

Ở bài này, chúng ta sẽ tìm hiểu cách lấy dữ liệu từ Request trước khi chuyển sang Validation ở bài tiếp theo.


Request là gì?

Request là đối tượng đại diện cho một yêu cầu HTTP gửi đến Laravel.

Ví dụ người dùng:

  • Mở một trang web.

  • Gửi biểu mẫu thêm bài viết.

  • Nhấn nút tìm kiếm.

  • Cập nhật thông tin cá nhân.

Tất cả dữ liệu đều được Laravel đóng gói trong đối tượng Request.

🎯Web Layout 2026 - Phần 1 # Bài 03 — SEO Friendly HTML: Xây dựng HTML thân thiện với Công cụ Tìm kiếm

Một website đẹp nhưng không ai tìm thấy trên Google thì cũng khó phát huy giá trị. Vì vậy, ngay từ khi viết HTML, chúng ta cần xây dựng cấu trúc thân thiện với công cụ tìm kiếm (SEO - Search Engine Optimization).

SEO không chỉ là thêm từ khóa hay cài plugin. Nền tảng của SEO bắt đầu từ HTML chuẩn, Semantic HTML, nội dung rõ ràng và cấu trúc hợp lý.

Trong bài học này, chúng ta sẽ tìm hiểu cách xây dựng một trang HTML dễ hiểu đối với Google và các công cụ tìm kiếm khác.


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu SEO Friendly HTML là gì.

  • Biết cách sử dụng đúng các thẻ Heading.

  • Viết Title và Meta Description hiệu quả.

  • Tối ưu hình ảnh và liên kết.

  • Xây dựng cấu trúc HTML giúp Google dễ thu thập dữ liệu.

  • Tránh những lỗi SEO HTML phổ biến.

Thứ Năm, 23 tháng 7, 2026

🎯Web Layout 2026 - Phần 1 # Bài 02 — Form Enterprise: Xây dựng Biểu mẫu Chuyên nghiệp với HTML5

Một website doanh nghiệp có thể thiếu hiệu ứng đẹp, nhưng gần như không thể thiếu Form.

Từ trang liên hệ, đăng nhập, đăng ký, tìm kiếm, đặt hàng, gửi yêu cầu báo giá đến hệ thống CRM hay ERP, tất cả đều hoạt động thông qua biểu mẫu.

HTML5 đã bổ sung rất nhiều tính năng giúp Form trở nên thông minh hơn, giảm lượng JavaScript phải viết và mang lại trải nghiệm tốt hơn cho người dùng.


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu cấu trúc chuẩn của một Form HTML5.

  • Biết sử dụng các loại input hiện đại.

  • Áp dụng các thuộc tính kiểm tra dữ liệu.

  • Tạo Form thân thiện với người dùng.

  • Chuẩn bị nền tảng để tích hợp PHP, Laravel hoặc Node.js.

🚀 Laravel 12 (2026) — Bài 17 — Polymorphic Relationship

Ở các bài trước, mỗi Relationship đều liên kết giữa các Model cố định.

Ví dụ:

  • User ↔ Profile

  • User ↔ Post

  • Post ↔ Tag

Tuy nhiên trong thực tế, có nhiều trường hợp nhiều Model khác nhau cùng chia sẻ một loại dữ liệu.

Ví dụ:

  • Post có Comment.

  • Video có Comment.

  • Product có Comment.

Nếu tạo riêng ba bảng bình luận thì sẽ rất khó quản lý.

Laravel giải quyết vấn đề này bằng Polymorphic Relationship.

🚀 Node.js LTS (2026) — Bài 07: Path - Làm việc với đường dẫn một cách an toàn 🛣️

"Đừng tự nối đường dẫn bằng dấu /. Hãy để Node.js xử lý điều đó bằng module path để chương trình hoạt động đúng trên mọi hệ điều hành."


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu module path là gì.

  • Biết vì sao cần dùng path thay vì tự nối chuỗi.

  • Thành thạo các hàm:

    • join()

    • resolve()

    • basename()

    • dirname()

    • extname()

  • Biết kết hợp path với fs.

  • Viết chương trình tương thích trên Windows, Linux và macOS.

Thứ Tư, 22 tháng 7, 2026

🎯Enterprise Web Layout Master 2026 - Phần 1 # Bài 01 — Semantic HTML5: Nền tảng của mọi Website Doanh nghiệp


Trong hành trình trở thành một lập trình viên Front-End hoặc Full Stack, nhiều người thường chỉ quan tâm đến việc giao diện có đẹp hay không. 

Tuy nhiên, với các dự án thực tế, đặc biệt là website doanh nghiệp, thương mại điện tử, CRM hay Dashboard, điều quan trọng hơn là cấu trúc HTML phải rõ ràng, chuẩn và có ý nghĩa.

Đó chính là lý do Semantic HTML5 luôn là bài học đầu tiên.


🎯 Mục tiêu bài học

Sau bài này bạn sẽ hiểu được:

  • Semantic HTML là gì?

  • Tại sao Google thích Semantic HTML?

  • Vì sao Screen Reader cần Semantic HTML?

  • Cách tổ chức bố cục website chuẩn Enterprise.

  • Khi nào dùng <section> và khi nào dùng <article>.

  • Những lỗi Semantic phổ biến mà người mới thường mắc phải.

🚀 Laravel 12 (2026) — Bài 16 — Relationship Has Many Through

Sau khi đã học One To One, One To ManyMany To Many, chúng ta sẽ tìm hiểu thêm một kiểu Relationship đặc biệt của Eloquent là Has Many Through.

Kiểu quan hệ này cho phép truy cập các bản ghi ở bảng cuối cùng thông qua một Model trung gian mà không cần tự viết câu lệnh JOIN.


Has Many Through là gì?

Has Many Through là quan hệ một - nhiều - nhiều.

Ví dụ:

  • Một Country có nhiều User.

  • Một User có nhiều Post.

Suy ra:

  • Một Country có nhiều Post thông qua User.

Sơ đồ:

Country
   │
   └──── User
            │
            ├── Post
            ├── Post
            └── Post

Country không liên kết trực tiếp với Post.

Laravel sẽ đi qua bảng User.

🚀 Node.js LTS (2026) — Bài 06: File System (fs) - Làm việc với tệp và thư mục 📂

"Hầu hết mọi ứng dụng đều phải đọc hoặc ghi dữ liệu. Trong Node.js, module fs chính là cây cầu giúp chương trình giao tiếp với hệ thống tệp của máy tính."


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu module fs là gì.

  • Biết đọc và ghi file.

  • Tạo, sao chép, đổi tên và xóa file.

  • Tạo và xóa thư mục.

  • Phân biệt Sync, CallbackPromise.

  • Biết khi nào nên dùng từng cách.

Thứ Ba, 21 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 15 — Relationship Many To Many

Ở bài trước, chúng ta đã tìm hiểu quan hệ One To Many, trong đó một bản ghi có thể liên kết với nhiều bản ghi khác.

Tuy nhiên, có những trường hợp cả hai phía đều có thể liên kết với nhiều bản ghi của nhau. Ví dụ:

  • Một bài viết có nhiều thẻ (Tag).

  • Một thẻ có thể xuất hiện trong nhiều bài viết.

  • Một sinh viên học nhiều môn học.

  • Một môn học có nhiều sinh viên.

Đó chính là quan hệ Many To Many.

Laravel hỗ trợ kiểu quan hệ này thông qua Pivot Table (bảng trung gian).

🚀 Node.js LTS (2026) — Bài 05: npm - Trái tim của hệ sinh thái Node.js 📦

"Node.js mạnh không chỉ vì Runtime, mà còn vì hệ sinh thái hàng triệu package được chia sẻ thông qua npm."


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu npm là gì.

  • Biết vai trò của package.json.

  • Phân biệt dependenciesdevDependencies.

  • Hiểu package-lock.json dùng để làm gì.

  • Biết sử dụng scripts để tự động hóa công việc.

  • Có thể quản lý package trong dự án Node.js một cách chuyên nghiệp.

Thứ Hai, 20 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 14 — Relationship One To Many

Ở bài trước, chúng ta đã tìm hiểu quan hệ One To One, trong đó mỗi bản ghi chỉ liên kết với duy nhất một bản ghi khác.

Trong thực tế, quan hệ One To Many xuất hiện thường xuyên hơn rất nhiều. 

Ví dụ, một người dùng có thể viết nhiều bài viết, một danh mục có thể chứa nhiều bài viết hoặc một đơn hàng có nhiều sản phẩm.

Laravel hỗ trợ kiểu quan hệ này rất đơn giản thông qua hai phương thức hasMany()belongsTo().

📘Node.js 2026 — Bài 04 — Module trong Node.js: CommonJS, ES Module, export, import và package.json

"Module là nền tảng giúp chia nhỏ chương trình thành nhiều tệp, dễ quản lý, dễ tái sử dụng và dễ bảo trì. Hầu hết mọi ứng dụng Node.js đều được xây dựng từ các module."


Mục tiêu bài học

Sau bài học này, bạn sẽ:

  • Hiểu Module là gì.

  • Biết tại sao phải chia chương trình thành nhiều file.

  • Hiểu CommonJS.

  • Hiểu ES Module.

  • Sử dụng require().

  • Sử dụng module.exports.

  • Sử dụng import.

  • Sử dụng export.

  • Hiểu vai trò của package.json.

Chủ Nhật, 19 tháng 7, 2026

📘Node.js 2026 — Bài 03 — Chương trình Node.js đầu tiên

"Mọi lập trình viên Node.js đều bắt đầu từ một dòng lệnh đơn giản: node app.js. Từ đó, bạn sẽ khám phá cách chương trình giao tiếp với hệ điều hành và người dùng thông qua console, process, argvreadline."


Mục tiêu bài học

Sau bài học này, bạn sẽ:

  • Biết cách tạo chương trình Node.js đầu tiên.

  • Chạy file JavaScript bằng lệnh node.

  • Sử dụng console để hiển thị thông tin.

  • Hiểu đối tượng process.

  • Đọc tham số dòng lệnh bằng process.argv.

  • Nhập dữ liệu từ bàn phím bằng readline.

📘Node.js 2026 — Bài 02 — Cài đặt Node.js LTS (2026)

"Một môi trường phát triển được cài đặt đúng ngay từ đầu sẽ giúp bạn tập trung vào việc học và xây dựng ứng dụng, thay vì mất thời gian xử lý các lỗi cấu hình."


Mục tiêu bài học

Sau bài học này bạn sẽ:

  • Hiểu Node.js LTS là gì.

  • Biết sự khác nhau giữa LTS và Current.

  • Cài đặt Node.js thành công.

  • Hiểu npm và npx.

  • Cài đặt Visual Studio Code.

  • Làm quen với Terminal.

  • Kiểm tra môi trường phát triển đã sẵn sàng.

🚀 Node.js 2026 — Bài 01 — Node.js là gì?

Dưới đây là Bài 01 theo đúng phong cách của series Laravel 12 (2026): giải thích dễ hiểu, nhiều ví dụ thực tế, bám sát Node.js LTS năm 2026 và hướng đến mục tiêu xây dựng REST API.

"JavaScript không còn chỉ chạy trong trình duyệt. Với Node.js, JavaScript có thể xây dựng cả những hệ thống backend hiện đại phục vụ hàng triệu người dùng."


Mục tiêu bài học

Sau bài học này bạn sẽ hiểu được:

  • Node.js là gì?

  • JavaScript Runtime là gì?

  • V8 Engine hoạt động như thế nào?

  • Event Loop là gì?

  • Non-blocking I/O là gì?

  • Khi nào nên dùng Node.js?

  • Khi nào không nên dùng Node.js?

🚀 Laravel 12 (2026) — Bài 13 — Relationship One To One

Sau khi đã biết cách truy vấn dữ liệu bằng Eloquent và Query Builder, bước tiếp theo là tìm hiểu Relationship (mối quan hệ) giữa các Model.

Trong thực tế, dữ liệu hiếm khi tồn tại độc lập. 

Một người dùng có thể có hồ sơ cá nhân, một bài viết thuộc về một danh mục, một sản phẩm có nhiều hình ảnh... 

Việc liên kết các bảng với nhau giúp cơ sở dữ liệu trở nên khoa học và tránh trùng lặp dữ liệu.

Trong bài này, chúng ta sẽ tìm hiểu mối quan hệ đơn giản nhất: One To One.

Thứ Tư, 15 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 09 — Factory : Tạo dữ liệu giả bằng Faker

Ở bài trước, chúng ta đã học cách sử dụng Seeder để thêm dữ liệu mẫu vào Database. 

Tuy nhiên, nếu cần tạo hàng trăm hoặc hàng nghìn bản ghi thì việc tự viết từng dữ liệu sẽ rất mất thời gian.

Laravel cung cấp Factory kết hợp với Faker để sinh dữ liệu giả (Fake Data) một cách tự động. 

Đây là công cụ được sử dụng rất phổ biến trong quá trình phát triển và kiểm thử ứng dụng.

Chủ Nhật, 12 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 07 — Migration trong Laravel 12: Tạo bảng và quản lý cơ sở dữ liệu bằng mã nguồn

Ở bài trước, chúng ta đã kết nối thành công Laravel với MySQL và chạy các Migration mặc định của hệ thống. 

Trong bài học này, chúng ta sẽ tìm hiểu sâu hơn về Migration – một trong những tính năng quan trọng nhất của Laravel.

Thay vì tạo bảng trực tiếp bằng phpMyAdmin, Laravel cho phép chúng ta quản lý toàn bộ cấu trúc cơ sở dữ liệu bằng mã nguồn. 

Điều này giúp dự án dễ bảo trì, dễ chia sẻ và đồng bộ giữa các thành viên trong nhóm.

Thứ Bảy, 11 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 06 — Cấu hình Database : Kết nối MySQL và Migration đầu tiên

Sau khi hoàn thành phần Routing, ControllerBlade, chúng ta đã có thể xây dựng giao diện cho ứng dụng. 

Tuy nhiên, mọi website thực tế đều cần lưu trữ dữ liệu như người dùng, bài viết, danh mục hay đơn hàng.

Đó là lúc Database trở thành thành phần không thể thiếu.

Trong bài học này, chúng ta sẽ tìm hiểu cách kết nối Laravel với MySQL và chạy Migration đầu tiên để tạo cơ sở dữ liệu theo chuẩn của Laravel.

Thứ Năm, 9 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 04 — Controller : Trái tim xử lý logic của ứng dụng

Ở bài trước chúng ta đã tìm hiểu về Routing – nơi tiếp nhận các yêu cầu (Request) từ người dùng. 

Tuy nhiên, nếu viết toàn bộ logic ngay trong file routes/web.php thì dự án sẽ nhanh chóng trở nên khó đọc và khó bảo trì.

Đó chính là lý do Controller ra đời.

Controller là gì?

Controller là nơi tiếp nhận Request từ Route, xử lý nghiệp vụ và trả kết quả về cho người dùng. Có thể hiểu đơn giản:

Route → Controller → Model → View

Controller đóng vai trò trung gian giữa giao diện (View) và dữ liệu (Model), giúp mã nguồn được tổ chức rõ ràng theo mô hình MVC.

Thứ Bảy, 4 tháng 7, 2026

🧩Xây dựng mô hình MVC đơn giản bằng PHP thuần (MySQLi)🐘

Trong ví dụ này, chúng ta xây dựng một ứng dụng PHP theo mô hình MVC (Model - View - Controller) mà không sử dụng framework.

📂 Cấu trúc thư mục

project/
│
├── app/
│   ├── controllers/
│   │   └── ProductController.php
│   │
│   ├── models/
│   │   └── ProductModel.php
│   │
│   └── views/
│       └── home.php
│
├── config/
│   └── Database.php
│
└── public/
    └── index.php

📘 Bài 34 — Giới thiệu Laravel 🚀

Bước tiếp theo sau khi thành thạo PHP Core

Sau khi đã học xong toàn bộ kiến thức PHP cơ bản, CRUD MySQL, OOP và mô hình MVC, bạn đã có nền tảng rất tốt để bước sang một Framework chuyên nghiệp.

Framework phổ biến nhất hiện nay trong cộng đồng PHP chính là Laravel.

Thứ Sáu, 3 tháng 7, 2026

📘 Bài 33 — MVC là gì? 🏗️

Tổ chức code chuyên nghiệp trong PHP

Ở những bài trước, chúng ta đã biết cách:

  • ✅ Kết nối MySQL

  • ✅ CRUD dữ liệu

  • ✅ Chia Header / Footer bằng include

  • ✅ Hash mật khẩu

  • ✅ Filter dữ liệu

  • ✅ Làm quen với OOP

Website đã chạy được.

Nhưng nếu dự án có hàng trăm file thì sao?

Ví dụ:

  • Trang chủ

  • Danh sách sản phẩm

  • Tin tức

  • Đăng nhập

  • Quản lý người dùng

  • Dashboard

Nếu tất cả đều viết trong một file PHP thì sẽ rất khó bảo trì.

Đó là lý do MVC ra đời.


Thứ Tư, 1 tháng 7, 2026

🛡️Defense in Depth (phòng thủ nhiều lớp)🎯

Trong các ứng dụng có yêu cầu bảo mật cao (ngân hàng, chứng khoán, y tế, chính phủ...), người ta áp dụng chiến lược Defense in Depth (phòng thủ nhiều lớp).

🛡️CSP (Content Security Policy) lớp khiên XSS hiệu quả🔒

CSP (Content Security Policy) là 01 lớp bảo mật của trình duyệt giúp ngăn chặn XSS, ngay cả khi hacker đã chèn được mã độc vào trang.

🛡️ Các lớp bảo vệ XSS

🔢🛠️ Hàm/Kỹ thuật🎯 Mục đích
1️⃣trim()Loại bỏ khoảng trắng đầu/cuối
2️⃣strip_tags() (nếu không cho phép HTML)Xóa các thẻ HTML
3️⃣filter_var()Validate email, URL, số...
4️⃣htmlspecialchars()Escape khi xuất ra HTML (quan trọng nhất)
5️⃣Prepared StatementChống SQL Injection (không phải XSS)
6️⃣CSP (Content Security Policy)Giảm thiểu XSS ngay cả khi lọt dữ liệu độc

📘 Bài 31 — Filter dữ liệu trong PHP 🛡️

Trước đây bạn đã học Password Hash. Bài tiếp theo hợp lý nhất là Filter dữ liệu (Data Filtering & Validation) vì đây là kỹ năng gần như dự án PHP nào cũng sử dụng.

Làm sạch và kiểm tra dữ liệu người dùng


🎯 Mục tiêu bài học

Sau bài này bạn sẽ biết:

✅ Filter dữ liệu bằng filter_var()

✅ Validate Email

✅ Validate URL

✅ Validate Number

✅ Làm sạch chuỗi nhập vào

✅ Một số Filter hữu ích khác trong PHP

Facebook Youtube RSS