Browse all series
FrameworksBeginner43 episodes

Laravel From Scratch (2026 Edition)

Welcome to the latest iteration of the longest running Laravel introductory video series in the world. Like clockwork, we refresh this series every two years. This latest 2026 iteration covers Laravel 12 and beyond.

You'll learn not only the basic fundamentals of Laravel, but also how to leverage more advanced features like authentication, authorization, queues, testing, and more. We'll even review the full deployment process from scratch.

Series episodes

The Fundamentals (13)

Welcome Aboard

34s

Join Jeffrey Way for Laravel From Scratch 2026 — a friendly, hands-on intro to modern Laravel fundamentals, tools, and best practices.

Set Up Your Development Environment

7m 27s

Set up your Laravel dev environment with Laravel Herd: install PHP, Composer, Node, scaffold a project, and explore routes/web.php and welcome view.

Routing 101

5m 26s

Learn Laravel routing: use Route::get and view(), add /about and /contact pages, and link between routes with ease.

Layout Files

16m 10s

DRY up views with Blade layouts: extract shared markup, use $slot, pass title props, Route::view, and merge $attributes for flexible components.

Pass Data to Views

5m 36s

Pass data to Blade views in Laravel: use Route::view's third param or view(...), read query with request(), and rely on Blade escaping.

Blade Directives

7m 39s

Master Blade directives: use @dump/@dd for debugging and clean control flow with @if, @foreach, and @forelse. Quick tips.

Forms

19m 43s

Build a tiny Laravel notebook: handle POST forms with @csrf, use request() to capture input, store ideas in session, and redirect home.

Databases, Migrations, and Eloquent

23m 59s

Master Laravel migrations, Eloquent models, and queries: create an ideas table, run artisan migrate, use Idea::create() and where() to filter ideas.

HTTP Requests and REST

24m 49s

Build a RESTful CRUD flow for ideas: list, show, edit, update, delete, confidently using Laravel route model binding and method spoofing.

Controllers

8m 51s

Organize Laravel routes with an IdeaController: move the form to ideas/create, implement seven resourceful actions, and centralize route logic.

Request Validation

12m 47s

Add request validation in Laravel: use request->validate, display errors with @error, and extract a reusable x-error component for cleaner forms.

Form Request Classes

8m 39s

Move validation into a Form Request: scaffold StoreIdeaRequest, use authorize() and rules(), customize messages, and simplify controller validation.

A Brief DaisyUI Detour

12m 48s

Polish UI quickly with Tailwind and DaisyUI: build nav, cards, and form controls; extract a nav component and reusable idea-card.

Final Project: Build and Deploy an App (21)

Final Project Setup

14m 29s

Build and deploy a feature-rich Idea app: init repo, push to GitHub, deploy with Forge, and add Pint, Rector, Code Rabbit, and Laravel Boost.

Design Your Model Layer

18m 40s

Scaffold Idea and Step models with migrations, factories, an IdeaStatus enum, relationships, defaults, and tests for a solid data foundation.

Tailwind Theme Setup And Initial UI

34m 14s

Set up a Tailwind theme and reusable UI: create layouts, nav, form/field components, and wire register/login routes for faster page building.

Browser Testing Registration Forms With Pest

9m 55s

Write Pest browser tests for Laravel registration, login, and logout: use user factories, data-test selectors, and debug to verify happy/error paths.

Flash Messaging and Interactivity with AlpineJS

6m 57s

Make Laravel flash messages come alive with Alpine.js: add a tiny x-data component using x-show, transition, and a timeout to auto-fade alerts.

Idea Cards

20m 31s

Build polished idea cards for /ideas: create route/controller, extract reusable Blade components (x-card, x-idea-status), and prep for filtering.

Idea Filtering

21m 44s

Add status filtering to ideas via the query string and an Eloquent scope; display filter pills with counts handled in the Idea model.

Show A Single Idea

11m 13s

Build a functional single-idea page: create show.blade.php, wire IdeaController@show, render title, links, nav, and a delete form.

Create A Functional Modal With AlpineJS

16m 12s

Build an accessible AlpineJS modal: open via events, use x-data/x-show with transitions, add escape/click-away handlers, extract reusable x-modal.

Construct The Idea Form

19m 12s

Build an idea form: wire to POST /ideas, make a textarea-aware field, add an Alpine status selector, add client-side validation and persist ideas.

Test The Create Idea Form

6m 30s

Automate testing of your idea form with browser tests: add data-test attributes, simulate clicks/fills as a user, and assert persistence.

Allow For One or Many Links

17m 40s

Easily add one-or-many link inputs to ideas: use Alpine x-model and an add button, submit links[] array, and validate server-side.

Actionable Steps

16m 24s

Add actionable steps to ideas: reuse modal, bind Alpine inputs to a steps array, validate and persist them, render and toggle completion.

Upload Featured Images To Storage

9m 33s

Add featured image uploads to ideas: use a file input, store files with Laravel storage, expose via storage:link and show in views.

Action Classes

11m 7s

Refactor idea creation into a reusable CreateIdea action: remove logic from controllers, use handle(), constructor injection and CurrentUser.

Authorization Is A Requirement

12m 24s

Secure your app with Laravel authorization: implement gates and an IdeaPolicy, use authorize/can middleware, and add tests to lock access.

The Edit Idea Modal

23m 33s

Edit ideas with a reusable Alpine modal: extract modal into a component, test the edit flow, and make open-modal dispatch work on show page.

Update Idea Action

16m 24s

Implement an UpdateIdea action: handle image uploads, update attributes, sync object-based steps, and secure the flow with browser and unit tests.

Edit Your Profile

18m 17s

Add profile edit flow: build /profile/edit with populated form, validate updates, handle password and email changes, notify and test.

Deploy And Then Implement A Feature Request

11m 27s

Deploy to Forge, run tests, format code, then add a formatted_description accessor with Str::markdown and Tailwind typography for polished markdown.

Where To Go From Here

2m 20s

Improve your finished Laravel app: add team collaboration and advanced authorization, or explore Livewire or Vue/React with Inertia for richer SPAs.

Continue learning

Thumbnail for Practical UI Components With Livewire and Alpine
Practical UI Components With Livewire and Alpine

With Shruti Balasa

  • 9 episodes
  • Intermediate
  • Frameworks
Thumbnail for 30 Days to Learn Laravel
30 Days to Learn Laravel

With Jeffrey Way

  • 30 episodes
  • Beginner
  • Frameworks
Thumbnail for What's New in Laravel 9
What's New in Laravel 9

With Jeffrey Way

  • 11 episodes
  • Intermediate
  • Frameworks
Thumbnail for The TALL Developer
The TALL Developer

With Shruti Balasa

  • 16 episodes
  • Beginner
  • Frameworks
Thumbnail for Discover Symfony Components
Discover Symfony Components

With Jeffrey Way

  • 4 episodes
  • Intermediate
  • Frameworks

Would you like to hear from Laracasts by email occasionally?