Laravel Learning Path

This repository contains the ordered list of Laravel topics to learn, step-by-step, with related links.

If you want to add a topic, link, or any other suggestion, please open Issues or Pull Requests.

Notice 1: The same table below is also available as a database, so you would be able to transform it to any other format you want - PDF, chart, etc. See file roadmap.sql

Notice 2: This content was filled into an adminpanel generated with our QuickAdminPanel - here's a video demo of that process on Youtube. By purchasing QuickAdminPanel, you support my free initiatives, like this Roadmap.


Beginner Level

Create your very first simple Laravel project

Link icons: 📖 Official Docs 🎬 Video 📄 Article 🔠 Course

Topic Learning Links
Routing and Controllers: Basics
Callback Functions and Route::view() 📖 Basic Routing
📖 View Routes
Routing to a Single Controller Method 📖 Basic Controllers with Routes
Route Parameters 📖 Route Parameters
Route Naming 📖 Names Routes
Route Groups 📖 Route Groups
Blade Basics
Displaying Variables in Blade 📖 Blade: Displaying Data
Blade If-Else and Loop Structures 📖 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
Auth Basics
Starter Kits: Breeze (Tailwind) or Laravel UI (Bootstrap) 📖 Laravel Breeze Official Documentation
📖 Laravel UI: Official Github Page
Default Auth Model and Access its Fields from Anywhere 📖 Retrieving the Authenticated User
Check Auth in Controller / Blade 📖 Determining If The Current User Is Authenticated
📖 Blade: Authentication Directives
Auth Middleware 📖 Protecting Routes
Database Basics
Database Migrations 📖 Database Migrations
Basic Eloquent Model and MVC: Controller -> Model -> View 📖 Eloquent: Getting Started
Eloquent Relationships: belongsTo / hasMany / belongsToMany 📖 Eloquent Relationships: One-to-Many
📖 Eloquent Relationships: BelongsTo
📖 Eloquent Relationships: Many-to-Many
Eager Loading and N+1 Query Problem 📖 Relationships: Eager Loading
Full Simple CRUD
Route Resource and Resourceful Controllers 📖 Laravel Resource Controllers
📄 Simple Laravel CRUD with Resource Controllers [digitalocean.com]
Forms, Validation and Form Requests 📖 Laravel Validation
File Uploads and Storage Folder Basics 📖 Filesystem: File Uploads
Table Pagination 📖 Database Pagination

Advanced Beginner Level

The goal of this level is to find the first job or freelance gig

Link icons: 📖 Official Docs 🎬 Video 📄 Article 🔠 Course

Topic Learning Links
Routing Advanced
Route Model Binding 📖 Route Model Binding
🎬 Laravel Route Model Binding: All You Need To Know
Route Redirect 📖 Redirect Routes
Middleware
Create Custom Middleware Class 📖 Defining Middleware
Database Advanced
Database Seeders and Factories 📖 Database: Seeding
📖 Defining Model Factories
Eloquent Query Scopes 📖 Eloquent: Query Scopes
Polymorphic relationships 📖 Polymorphic Relationships
Eloquent Accessors and Mutators 📖 Accessors & Mutators
Eloquent Collections 📖 Eloquent Collections
📖 General Laravel Collections
Soft Deletes 📖 Soft Deleting
Auth Advanced
Authorization: Roles/Permissions, Gates, Policies 📖 Authorization
🎬 Laravel Roles and Permissions: All CORE Things You Need To Know
Authorization: Extra Packages - Spatie Permission, Bouncer, etc 🎬 Spatie Laravel Permission: Example Project Review
📄 Two Best Laravel Packages to Manage Roles/Permissions
📖 spatie/laravel-permission
📖 JosephSilber/bouncer
Authentication: Email Verification 📖 Email Verification
File Uploads Advanced
Drivers and Disks, Example of Amazon S3 📖 File Storage
🎬 Laravel: How to Upload Files to Amazon S3
Extra Packages: Spatie Medialibrary, Intervention Image, etc 📖 spatie/laravel-medialibrary
📖 intervention/image
API Basics
API Routes and Controllers 📖 API Resource Routes
📖 Default Route Files
Working with API Clients: Postman or Alternatives 📖 Postman API Client
API Eloquent Resources 📖 Eloquent: API Resources
API Auth with Sanctum 📖 Laravel Sanctum
API Error Handling and Status Codes 🎬 Laravel API 404 Error: Customize Exception Message
📄 HTTP Status Codes
Debugging Errors
Log Files in Laravel 📖 Logging
Try-Catch and Laravel Exceptions 📖 Error Handling
🎬 Exceptions in Laravel: Why/How to Use and Create Your Own
Local Debugging Tools: 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
Customizing Error Pages and Messages 📖 Custom HTTP Error Pages
🎬 Laravel Error Pages: Change Text or Customize Layouts
(optional) Third Party Bug Trackers: Bugsnag, Flare, Sentry, Rollbar 📖 Bugsnag Laravel
📖 Flare Homepage
📖 Sentry Laravel
📖 Rollbar Laravel
🎬 Bug Tracking in Laravel: Bugsnag vs Flare [Demo/Review]
Sending Email
Mailables and Mail Facade 📖 Mail & Mailables
Configure Drivers/Services: Mailgun, Mailtrap, etc 📄 How to Send Email From Laravel, and Why We Need 3rd Party Providers For It
📖 Mail: Drivers Prerequisites
Notifications System: Email, SMS, Slack, etc. 📖 Notifications
Automated Testing with PHPUnit
"Smoke" Tests to Check if Pages are Loading 📖 Testing: Getting Started
🔠 Laravel: PHPUnit Testing for Beginners
Configure Testing Database and Test CRUD Operations 📖 Database Testing
Deployment and Version Control
Git Version Control 📖 Git
🎬 Git in Laravel. Part 1 - Branches: Main, Develop and Feature
Deployment on Live 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

Mid Level

Master all Laravel features with 3-5 years of practical experience

Link icons: 📖 Official Docs 🎬 Video 📄 Article 🔠 Course

Topic Learning Links
Routing Extra Features
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
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
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]
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

(TO BE DONE LATER) Senior Level

Link icons: 📖 Official Docs 🎬 Video 📄 Article 🔠 Course

Topic Learning Links