logo
Published on

Lộ trình học Laravel từ Beginner đến Senior Level

Mục lục

Giới thiệu

Mình là một người tự học Laravel, nên có lẽ mình hiểu được sẽ khó khăn như thế nào nếu không ai hướng dẫn, chúng ta sẽ không biết nên học từ đâu và nên học gì tiếp theo. Trong quá trình học Laravel mình đã từng lạc lõng không biết nên học gì tiếp theo, và có lẽ một roadmap từ một người có kinh nghiệm sẽ giúp ích định hướng cho mình rất nhiều. Hôm nay mình giới thiệu đến các bạn roadmap từ Povilas Korop - chủ kênh LaravelDaily - ông đã có hơn 15 năm kinh nghiệm trong ngành lập trình, đây là tổng hợp từ hơn 20,000 giờ code của ông và sự đóng góp từ cộng đồng vì vậy rất đáng để tham khảo.

Những tài liệu dưới đây đa số là tiếng anh, mình sẽ cố gắng dịch trong thời gian gần nhất để cung cấp cho các bạn nguồn tài liệu tham khảo khi học Laravel. Chúng ta sẽ có 4 mức từ căn bản đến nâng cao như sau:

  1. Beginner Level (0-1 năm kinh nghiệm)
  2. Advanced Beginner Level (1-3 năm)
  3. Mid Level (3-5 năm kinh nghiệm)
  4. Senior Level (trên 5 năm)

Đây chỉ là mức tham khảo cho các bạn, tuỳ người sẽ có thể đi nhanh hơn hoặc chậm hơn, chuyện đó không quan trọng, hãy cố gắng học hỏi nhiều nhất có thể.

Beginner Level: Mức căn bản

Những kiến thức căn bản khi bạn mới bắt đầu về Laravel, khi học xong phần này bạn có thể làm được những trang web như blog cá nhân, trang web đại diện thương hiệu, ... là những trang web không yêu cầu cao về tính tương tác.

Ký hiệu: 📔 Laravel Docs 🎬 Video 📄 Bài viết 🔠 Khoá học. Bài viết có dấu ⭐ là bài viết tiếng Việt

Topic Learning Links
Routing and Controllers: Căn bản 🎬 Laravel 8 Routing: Important Change You Need to Know
Route căn bản và hàm Route::view() 📔 Basic Routing
📔 View Routes
Kết nối Route và Controller 📔 Basic Controllers with Routes
Tham số Route (Route Parameters) 📔 Route Parameters
Đặt tên Route (Names Route) 📔 Names Routes
🎬 Laravel: Why You Need Route Names?
Nhóm route giống nhau (Route Groups) 📔 Route Groups
🎬 Laravel Route Grouping: Simple to Very Complex
🎬 More videos
Blade căn bản 🎬 9 Quick Tips about Laravel Blade
Hiển thị biến trên view 📔 Blade: Displaying Data
Cấu trúc if-else và vòng lặp 📔 Blade: If-Statements
📔 Blade Loops
Layout: @include, @extends, @section, @yield 📔 Blade: Layout Using Template Inheritance
Blade Components 📔 Blade Components
🎬 Laravel Blade Components: Two Examples - Laravel Breeze/UI
Xác thực căn bản 8 Tips & Tricks about Laravel Auth
Giới thiệu về Breeze (Tailwind) và Laravel UI (Bootstrap) 📔 Laravel Breeze Official Documentation
📔 Laravel UI: Official Github Page
🎬 Laravel 8 Auth: 5 "Latest" Things You Need to Know
More videos
Truy vấn thông tin người dùng đã đăng nhập 📔 Retrieving the Authenticated User
Kiểm tra đăng nhập trong controller và view 📔 Determining If The Current User Is Authenticated
📔 Blade: Authentication Directives
Xác thực người dùng theo từng route 📔 Protecting Routes
Về cơ sở dữ liệu
Cấu hình CSDL Cấu hình cơ sở dữ liệu MySQL với Laravel
Migrations (tạo cấu trúc bảng) 📔 Database Migrations
🎬 Laravel Migrations: Table Created but Foreign Key Failed?
More videos
Eloquent căn bản và mô hình MVC 📔 Eloquent: Getting Started
Quan hệ trong Eloquent: belongsTo / hasMany / belongsToMany 📔 Eloquent Relationships: One-to-Many
📔 Eloquent Relationships: BelongsTo
📔 Eloquent Relationships: Many-to-Many
🎬 How to Safely Change DB Relations in Live Laravel Project?
Eager Loading và vấn đề N+1 truy vấn 📔 Relationships: Eager Loading
🎬 Laravel N+1 Query Detector: Don't Forget Eager Loading
Xây dựng CRUD nhanh chóng
Route Resource and Resourceful Controllers 📔 Laravel Resource Controllers
📄 Simple Laravel CRUD with Resource Controllers [digitalocean.com]
🎬 Laravel Nested Resource Controllers: Two-Level Deep
🎬 More videos
Forms, Validation and Form Requests 📔 Laravel Validation
🎬 New in Laravel 6.13: Format Validation Error Field Name 🎬 More videos
Upload và lưu trữ file/ảnh Xử lý upload file ảnh trên Laravel
📔 Filesystem: File Uploads
🎬 Laravel: How to Upload File During User Registration
More videos
Phân trang 📔 Database Pagination

Dự án mẫu mức Beginner: Blog Cá Nhân

Để có thể tiếp thu các kiến thức trên, bạn hãy thực thực hiện một ý tưởng như làm một trang web cá nhân theo gợi ý này. Trong link repo bên trên bạn sẽ tìm thấy yêu cầu về công việc sẽ làm và một số gợi ý để thực hiện.


Advanced Beginner Level: Mức trên căn bản

Ở mức Advanced, bạn đã có một kiến thức nền về Laravel, level này bạn sẽ tìm hiểu về các kỹ thuật nâng cao hơn về Laravel như Middleware, Authorization hay xây dựng API, mục tiêu sau khi hoàn thành level này bạn sẽ có thể tự tin tìm kiếm một công việc freelance cho mình.

Ký hiệu: 📔 Laravel Docs 🎬 Video 📄 Bài viết 🔠 Khoá học. Bài viết có dấu ⭐ là bài viết tiếng Việt

Topic Learning Links
Routing nâng cao 🎬 Laravel: 8 Tips for Advanced Routing
🎬 More videos
Route Model Binding 📔 Route Model Binding
🎬 Laravel Route Model Binding: All You Need To Know
🎬 More videos
Chuyển hướng trong Route 📔 Redirect Routes
Middleware
Tạo một Middleware 📔 Defining Middleware
Database Advanced
Tạp dữ liệu bằng Seeders and Factories 📔 Database: Seeding
📔 Defining Model Factories
🎬 Laravel Factories: Generate and Re-use Fake Records
🎬 More videos
Query Scopes trong Eloquent 📔 Eloquent: Query Scopes
🎬 Same Eloquent Where Condition? Refactor into Local Scopes
Quan hệ đa hình (Polymorphic) 📔 Polymorphic Relationships
🎬 Laravel.io Portal: Polymorphic Relations Example
Định dạng đầu ra và đầu vào trên Eloquent (Accessors và Mutators) 📔 Accessors & Mutators
Collections trong Eloquent 📔 Eloquent Collections
📔 General Laravel Collections
Xoá mềm (Soft Deletes) 📔 Soft Deleting
Xoá dữ liệu của quan hệ con khi sử dụng Soft Deletes (cascade delete)
Authentication nâng cao
Phân quyền: Roles/Permissions, Gates, Policies 📔 Authorization
🎬 Laravel Roles and Permissions: All CORE Things You Need To Know
More videos
Phân quyền: Một số package thường dùng - Spatie Permission, Bouncer, etc 🎬 Spatie Laravel Permission: Example Project Review
📄 Two Best Laravel Packages to Manage Roles/Permissions
📔 spatie/laravel-permission
📔 JosephSilber/bouncer
Xác thực Email 📔 Email Verification
🎬 How to Translate/Customize Laravel Auth Default Emails
Upload file nâng cao 🔠 File Uploads in Laravel
Drivers và Disks, Ví dụ về Amazon S3 📔 File Storage
🎬 Laravel: How to Upload Files to Amazon S3
Một số package: Spatie Medialibrary, Intervention Image, etc 📔 spatie/laravel-medialibrary
📔 intervention/image
🎬 Spatie Media Library Pro: Laravel File Uploads with Great UX [REVIEW]
🎬 More videos
API căn bản 🔠 How to Create Laravel API
🎬 Create Model with API Controller - in one Artisan Command
Laravel API: Be Careful When Doing Changes
API Routes và Controllers 📔 API Resource Routes
📔 Default Route Files
🎬 Junior Code Review: Simple Laravel API - in 5 Different Ways
Làm quen với các API Clients: Postman 📔 Postman API Client
API Eloquent Resources 📔 Eloquent: API Resources
🎬 Laravel API Result: Add Fields with Map or Appends
API Auth với Sanctum 📔 Laravel Sanctum
🎬 Laravel API Auth with Sanctum and API Tokens
🎬 More videos
API Xử lý lỗi và các mã lỗi 🎬 Laravel API 404 Error: Customize Exception Message
📄 HTTP Status Codes
Debug lỗi
File log trong Laravel 📔 Logging
Try-Catch và xử lý ngoại lệ 📔 Error Handling
🎬 Exceptions in Laravel: Why/How to Use and Create Your Own
Các công cụ debug: Debugbar, Telescope, Ray 📔 barryvdh/laravel-debugbar
📔 Laravel Telescope
📔 Spatie Ray (Premium Tool)
🎬 Debug Eloquent Queries from API: Laravel Telescope
🎬 Spatie Ray: Laravel Debugging with Pleasure
Tuỳ biến trang báo lỗi và thông điệp 📔 Custom HTTP Error Pages
🎬 Laravel Error Pages: Change Text or Customize Layouts
🎬 New in Laravel 8.26: Override 404 Page with Route Missing
(optional) Một số tracker theo dõi khác: Bugsnag, Flare, Sentry, Rollbar 📔 Bugsnag Laravel
📔 Flare Homepage
📔 Sentry Laravel
📔 Rollbar Laravel
🎬 Bug Tracking in Laravel: Bugsnag vs Flare [Demo/Review]
Gửi email 🎬 Laravel: 3 Ways to Send a Welcome Email (Controller vs Observer vs Events)
Hàm gửi mail trong Laravel 📔 Mail & Mailables
Cấu hình dịch vụ mail: Mailgun, Mailtrap, etc 📄 How to Send Email From Laravel, and Why We Need 3rd Party Providers For It
📔 Mail: Drivers Prerequisites
Hệ thống thông báo: Email, SMS, Slack, etc. 📔 Notifications
🎬 Laravel Notifications: "Database" Driver - Demo Project
Unit Testing với PHPUnit 🎬 Why People (Don't) Write Automated Tests?
Kiểm thử mã nguồn căn bản 📔 Testing: Getting Started
🔠 Laravel: PHPUnit Testing for Beginners
🎬 PHPUnit in Laravel: Simple Example of Why/How to Test
Cấu hình kiểm thử CSDL 📔 Database Testing
Quản lý mã nguồn
Quản lý mã nguồn với Git 📔 Git
🎬 Git in Laravel. Part 1 - Branches: Main, Develop and Feature
🎬 [More videos](videos/git-version-control.md
Triển khai lên Servers 📔 Deployment
📄 How to Deploy Laravel Projects to Live Server: The Ultimate Guide
📄 What Server is Needed to Deploy Laravel Projects
🎬 How we Deploy Laravel: Branches, Staging Servers, Forge and Envoyer

Dự án mẫu mức Advanced Beginner: Hệ thống quản lý thông tin khách hàng CRM

Để có thể tiếp thu các kiến thức trên, bạn hãy thực thực hiện một ý tưởng như làm một trang web có tính liên kết dữ liệu như quản lý thông tin khách hàng, quản lý tồn kho, quản lý hộ khẩu, ...

Hoặc bạn cũng làm theo dự án này. Trong link repo bên trên bạn sẽ tìm thấy yêu cầu về công việc sẽ làm và một số gợi ý.


Mid Level: Mức trung bình

Các bài học dưới đây sẽ yêu cầu nhiều hơn về tối ưu một ứng dụng như xử lý Cache, Event hay quan trọng nhất là viết được Unit Testing. Thông thường lập trình viên Laravel với 3-5 năm kinh nghiệm thực tế sẽ có thể đặt đến cảnh giới này. Những kỹ năng dưới đây mình nghĩ là nên để nguyên bằng tiếng Anh, dịch ra tiếng Việt thì mất hay, một số cái dịch ra rồi cũng chả hiểu gì cả.

Ký hiệu: 📔 Laravel Docs 🎬 Video 📄 Bài viết 🔠 Khoá học. Bài viết có dấu ⭐ là bài viết tiếng Việt

Topic Learning Links
**Tính năng bổ sung trên Routing **
Route Caching 📔 Route Caching
Rate Limiting 📔 Rate Limiting
🎬 Laravel: Create Public API with Cache and Rate Limits
Invokable controllers 📔 Single Action Controllers
Database/Eloquent Extra Features
Model Observers 📔 Eloquent Observers
🎬 Laravel Model: Check if Any Field Was Changed
🎬 Eloquent Observers or Events Listeners? Which is Better?
Raw Database Queries 📔 Query Builder: Raw Expressions
All Eloquent Features 📔 All About Eloquent
🔠 Eloquent: Expert Level
📄 20 Laravel Eloquent Tips and Tricks
🎬 Laravel Collections: 5 Methods with Real Examples
More videos
Various Extra Laravel Features
Custom Blade Directives 📔 Extending Blade
Events and Listeners 📔 Events and Listeners
🎬 Laravel: 3 Ways to Send a Welcome Email (Controller vs Observer vs Events)
🎬 Laravel: Why Observers and Event Listeners are "Risky"
Laravel HTTP Client and Guzzle 📔 HTTP Client
🎬 Laravel and External APIs: Get Data with HTTP Client
Login with X: Laravel Socialite 📔 Laravel Socialite
Creating Artisan Commands 📔 Writing Artisan Commands
🎬 How to Create Artisan Commands in Laravel
Task Scheduling 📔 Task Scheduling
🎬 Laravel Task Scheduling: Run Artisan Command Hourly
Caching 📔 Cache
🎬 Cache Eloquent Query Results to Load Pages Instantly
Real-time: Broadcasting, Echo and Pusher 📔 Broadcasting
Jobs and Queues 🔠 Queues in Laravel
Queueable Classes and Jobs 📔 Creating Jobs
📔 Queueing Notifications
📔 Queued Event Listeners
📔 Queueing Mail
🎬 Laravel Queues 101: Example with Sending Emails
Job Dispatching, Batching and Chaining 📔 Dispatching Jobs
Processing Failed Jobs 📔 Dealing with Failed Jobs
Configuring Queues: Drivers, Redis, Supervisor 📔 Running the Queue Worker
📔 Configuring Supervisor
Laravel Horizon (optional, if you use Redis) 📔 Laravel Horizon
API Advanced
Upload Files via API 📄 Laravel API: How to Upload File from Vue.js
Generate API Documentation 📄 Laravel API Documentation with OpenAPI/Swagger
🎬 Scribe: New Package for Laravel API Documentation
API Versioning 📄 Versioning your REST API with Laravel
🎬 Versioning your API: from V1 to V2 and Beyond [video from my course]
API with OAuth and Laravel Passport 📔 Laravel Passport
🎬 Laravel API Auth Demo: Passport, oAuth and Sanctum
Only-API Projects with Front-end like Vue.js 🔠 Vue.js + Laravel: CRUD with SPA
Only-API Projects with Mobile Apps 📄 Using Sanctum to authenticate a mobile app
(optional) Starter Kits: Laravel Jetstream and Fortify
Laravel Jetstream (requires Livewire/Inertia knowledge) 📔 Laravel Jetstream
🔠 Laravel Jetstream+Livewire: Real Mini-Project
🎬 Laravel Jetstream: How it Works and Example How to Customize
Laravel Fortify 📔 Laravel Fortify
🎬 Laravel Fortify: Four Auth Things to Customize
Payments
Laravel Cashier with Stripe/Paddle 📔 Laravel Cashier (Stripe)
📔 Laravel Cashier (Paddle)
Custom Payment Providers: PayPal, Mollie, etc 📄 Subscription billing with Laravel Cashier for Mollie
📄 How To Integrate Paypal Payment Gateway In Laravel
Automated Testing Advanced
TDD: Test-Driven Development 🔠 Build A Laravel App With TDD
🔠 TDD With Laravel
Mocking 📔 Mocking
(optional) Laravel Dusk 📔 Laravel Dusk
Full-Text Search
Laravel Scout 📔 Laravel Scout
Drivers: ElasticSearch, Algolia or MeiliSearch 📄 ElasticSearch Driver for Laravel Scout
📔 Algolia: Scout Extended
📄 Full-Text Search with MeiliSearch and Laravel Scout
Laravel Packages
Contributing to Packages, making Pull Requests 🎬 How to Contribute to Laravel Docs (or any open-source repository)
Create Laravel Packages 📔 Package Development
🔠 Laravel Package Development

Senior Level: Mức lão luyện

Ở mức Senior, bạn cần quan tâm nhiều hơn về cấu trúc tổng thể dự án thay vì những kỹ năng đơn lẻ, một lập trình viên Senior sẽ bận tâm nhiều hơn về hàm nào nên nằm trong class nào hơn là làm sao để cho nó chạy.

Ký hiệu: 📔 Laravel Docs 🎬 Video 📄 Bài viết 🔠 Khoá học. Bài viết có dấu ⭐ là bài viết tiếng Việt

Topic Learning Links
PHP/Laravel Design Patterns 🎬 Laravel Design Patterns - Bobby Bouwmann - Laracon EU 2018 Amsterdam
🔠 Laracasts: Design Patterns in PHP
🎬 Colin Decarlo - Design Patterns with Laravel [Laracon 2018]
🎬 Matt Stauffer - Patterns That Pay Off [Laracon 2018]
🔠 Design Patterns in PHP
Creational Design Patterns 📄 Design Patterns PHP: Creational
Structural Design Patterns 📄 Design Patterns PHP: Structural
Behavioral Design Patterns 📄 Design Patterns PHP: Behavioral
Well-written Code
SOLID Code 🎬 Becoming a better developer by using the SOLID design principles by Katerina Trajchevska
📄 Writing Maintainable Code: SOLID Principles Explained in PHP (Laravel)
🔠 Laracasts: SOLID Principles in PHP
🎬 PHP Solid Principles [Playlist]
Scalable Code 🔠 Scaling Laravel
🎬 Enterprise Laravel by Matt Stauffer
📄 What the hell is scalable code anyway?
Maintainable Code 📄 How would you know if you've written readable and easily maintainable code? [forum thread]
📄 Crafting maintainable Laravel applications
📄 7 Golden Rules of Clean, Simple and Maintainable Code
Best Practices and Standards 📄 Repository: alexeymezenin / laravel-best-practices
🔠 PHP: The Right Way
📄 Reddit: What are your Laravel best practices?
Large Datasets
Large Database Structures 🔠 How to Structure Databases in Laravel
NoSQL Solutions 📔 MongoDB and Laravel Integration
📄 MongoDB + Laravel = Love — When to use NoSQL
Eloquent/SQL Query Optimization 📄 18 Tips to optimize laravel database queries
📄 Optimizing Laravel Part 2: Improving Query Performance with Database Indexing
🔠 Eloquent Performance Patterns
Scaling to Multiple Databases 📄 Scaling Laravel App with Multiple Databases
📄 Multiple DB Connections in Laravel
Working with High-Traffic Projects
Stability and Zero-Downtime Deployments 📔 Laravel Deployer
📔 Envoyer - Zero Downtime PHP Deployment
Performance Optimization and Caching 🔠 Performant Laravel
📄 The Ultimate Performance Checklist For Laravel Apps
📄 How to Optimize PHP Laravel Web Application for High Performance?
Ensuring Code Quality
Writing Testable Code 📄 How to write testable code
📄 Refactoring towards testability
Continuous Integration and Continuous Delivery (CI/CD) 📄 How to create a CI/CD for a Laravel application using GitHub Actions
📄 Configure Laravel 8 for CI/CD with Jenkins and GitHub — Part 1
📄 Build, Test, and Deploy Your Laravel Application With GitHub Actions

Kết bài

Có thể nói Laravel là một framework mạnh ở thời điểm hiện tại, tuy nhiên không ai biết trước được khi nào sẽ có một framework mới hiệu quả hơn, tuy nhiên cái cốt vẫn là tư duy, cách lập trình sau cho code đẹp, rõ ràng. Hy vọng rằng bài viết này sẽ cung cấp cho các bạn một định hướng để bạn có thể theo đuổi Laravel.