Skip to main content
CF

Let's Build A Forum with Laravel and TDD

19h 30m 20s
English
Paid

A forum is a deceptively complex thing. Sure, it's made up of threads and replies, but what else might exist as part of a forum? What about profiles, or thread subscriptions, or filtering, or real-time notifications? As it turns out, a forum is the perfect project to stretch your programming muscles. In this series, we'll work together to build one with tests from A to Z.


About the Author: Laracasts

Laracasts thumbnail

Laracasts is the dominant subscription video platform for the Laravel PHP framework, founded and run by Jeffrey Way. Active since 2013, the site has grown into a multi-thousand-video catalog covering Laravel itself, Vue.js, Tailwind CSS, testing, and the broader modern PHP ecosystem. Laracasts videos are the de-facto onboarding path most working Laravel developers have used at some point in their career.

The catalog mirrored here under this source is a small slice of what the full platform offers — included for the depth of project-based material it provides on the framework. Material from Laracasts is paid, screencast-format, and aimed at working PHP developers rather than absolute beginners.

Watch Online 102 lessons

This is a demo lesson (10:00 remaining)

You can watch up to 10 minutes for free. Subscribe to unlock all 102 lessons in this course and access 10,000+ hours of premium content across all courses.

View Pricing
0:00
/
#1: Initial Database Setup With Seeding
All Course Lessons (102)
#Lesson TitleDurationAccess
1
Initial Database Setup With Seeding Demo
07:59
2
Test-Driving Threads
09:27
3
A Thread Can Have Replies
09:10
4
A User May Respond to Threads
17:40
5
The Reply Form
05:15
6
A User May Publish Threads
06:13
7
Let's Make Some Testing Helpers
05:44
8
The Exception Handling Conundrum
07:55
9
A Thread Should Be Assigned a Channel
14:12
10
How to Test Validation Errors
10:41
11
Users Can Filter Threads By Channel
13:26
12
Validation Errors and Old Data
08:24
13
Extracting to View Composers
03:00
14
A User Can Filter All Threads By Username
07:37
15
A Lesson in Refactoring
18:48
16
Meta Details and Pagination
09:20
17
A User Can Filter Threads By Popularity
11:51
18
A User Can Favorite Replies
15:47
19
The Favorite Button
07:37
20
From 56 Queries Down to 2
07:07
21
Global Scopes and Further Query Reduction
08:29
22
A User Has a Profile
12:32
23
A User Can Delete Their Threads
14:07
24
Authorization With Policies
10:29
25
How to Construct an Activity Feed with TDD
16:38
26
How to Construct An Activity Feed with TDD: Part 2
16:22
27
Extracting Controller Queries to the Model
07:40
28
The Activity Deletion Bug
05:11
29
Flash Messaging With Vue
14:00
30
A User's Activity Feed Should Include Favorited Replies
06:06
31
Authorized Users Can Delete Replies
07:59
32
A Vue Reply Component
13:52
33
Ajaxifying the Delete Button
04:22
34
A Vue Favorite Component
16:28
35
Squashing Bugs
08:32
36
A More Data-centric Approach
21:59
37
A New Reply Component
11:44
38
Laravel and Vue Pagination
31:02
39
A User Can Filter By Unanswered Threads
12:53
40
Thread Subscriptions: Part 1
10:53
41
Thread Subscriptions: Part 2
06:17
42
Thread Subscriptions: Part 3
15:13
43
Thread Subscriptions: Part 4
25:30
44
Test Refactoring
06:16
45
Thread Subscriptions: Part 5
13:22
46
Refactoring for the Better or Worse?
10:25
47
Notification Fakes in a Nutshell
05:21
48
This Thread Has Been Updated Since You Last Read It
15:55
49
Spam Detection
11:09
50
Graduating Inspection Methods to Classes
08:52
51
Spam Detection At All Ports
06:57
52
Handling Server Exceptions with JavaScript
10:17
53
Refactoring to Custom Validation
07:21
54
A User May Not Reply More Than Once Per Minute
15:11
55
Refactoring to Form Requests
12:04
56
Mentioned Users Notifications: Part 1
09:29
57
Mentioned Users Notifications: Part 2
12:14
58
Don't Forget to Scan Your Files
08:02
59
Wrap Usernames Within Anchor Tags
07:35
60
Instant Username Autocompletion
13:20
61
Instant Username Autocompletion: Part 2
13:34
62
Basic View Tweaks
07:49
63
Testing Avatar Uploads
13:50
64
Testing Avatar Uploads: Part 2
14:05
65
AJAX Image Uploads
28:04
66
Trending Threads With Redis
14:50
67
Isolating Knowledge
12:15
68
Thread Views: Design #1 - Trait
09:11
69
Thread Views: Design #2 - Extract Class
08:24
70
Thread Views: Design #3 - KISS
07:51
71
Users Must Confirm Their Email Address: #1 - Protection
09:47
72
Users Must Confirm Their Email Address: #2 - Confirmation
23:07
73
Users Must Confirm Their Email Address: #3 - Cleanup
15:17
74
Email Confirmation Loose Ends
08:03
75
A Thread Should Have a Unique Slug: Part 1
07:26
76
A Thread Should Have a Unique Slug: Part 2
11:45
77
We Need a Regression Test
13:29
78
Mark the Best Reply: Part 1
14:18
79
Mark the Best Reply: Part 2
07:58
80
Refactoring Authorization
06:08
81
Remembering a Best Reply
10:49
82
Confusing Errors and Solutions
11:08
83
Thread Authorization
06:40
84
An Administrator May Lock Any Thread
08:00
85
An Administrator May Lock Any Thread: Part 2
16:02
86
An Administrator May Lock Any Thread: Part 3
11:16
87
An Administrator May Lock Any Thread: Part 4
11:59
88
From Laravel 5.4 to Laravel 5.5
09:31
89
Recaptcha
09:33
90
Recaptcha Refactoring
12:51
91
A Thread Can Be Updated
13:34
92
A Thread Can Be Updated: Part 2
12:44
93
A Thread Can Be Updated: Part 3
15:22
94
First Class Search: Scout Review
09:07
95
First Class Search: Implementation
18:10
96
First Class Search: Faceting and Ranking
05:01
97
First Class Search: Instant Results
11:51
98
First Class Search: Forum Integration
11:02
99
WYSIWYG
15:29
100
WYSIWYG: Part 2
12:12
101
Sanitizing is a Must
19:29
102
Onward
01:58
Unlock unlimited learning

Get instant access to all 101 lessons in this course, plus thousands of other premium courses. One subscription, unlimited knowledge.

Learn more about subscription

Course content

102 lessons · 19h 30m 20s
Show all 102 lessons
  1. 1 Initial Database Setup With Seeding 07:59
  2. 2 Test-Driving Threads 09:27
  3. 3 A Thread Can Have Replies 09:10
  4. 4 A User May Respond to Threads 17:40
  5. 5 The Reply Form 05:15
  6. 6 A User May Publish Threads 06:13
  7. 7 Let's Make Some Testing Helpers 05:44
  8. 8 The Exception Handling Conundrum 07:55
  9. 9 A Thread Should Be Assigned a Channel 14:12
  10. 10 How to Test Validation Errors 10:41
  11. 11 Users Can Filter Threads By Channel 13:26
  12. 12 Validation Errors and Old Data 08:24
  13. 13 Extracting to View Composers 03:00
  14. 14 A User Can Filter All Threads By Username 07:37
  15. 15 A Lesson in Refactoring 18:48
  16. 16 Meta Details and Pagination 09:20
  17. 17 A User Can Filter Threads By Popularity 11:51
  18. 18 A User Can Favorite Replies 15:47
  19. 19 The Favorite Button 07:37
  20. 20 From 56 Queries Down to 2 07:07
  21. 21 Global Scopes and Further Query Reduction 08:29
  22. 22 A User Has a Profile 12:32
  23. 23 A User Can Delete Their Threads 14:07
  24. 24 Authorization With Policies 10:29
  25. 25 How to Construct an Activity Feed with TDD 16:38
  26. 26 How to Construct An Activity Feed with TDD: Part 2 16:22
  27. 27 Extracting Controller Queries to the Model 07:40
  28. 28 The Activity Deletion Bug 05:11
  29. 29 Flash Messaging With Vue 14:00
  30. 30 A User's Activity Feed Should Include Favorited Replies 06:06
  31. 31 Authorized Users Can Delete Replies 07:59
  32. 32 A Vue Reply Component 13:52
  33. 33 Ajaxifying the Delete Button 04:22
  34. 34 A Vue Favorite Component 16:28
  35. 35 Squashing Bugs 08:32
  36. 36 A More Data-centric Approach 21:59
  37. 37 A New Reply Component 11:44
  38. 38 Laravel and Vue Pagination 31:02
  39. 39 A User Can Filter By Unanswered Threads 12:53
  40. 40 Thread Subscriptions: Part 1 10:53
  41. 41 Thread Subscriptions: Part 2 06:17
  42. 42 Thread Subscriptions: Part 3 15:13
  43. 43 Thread Subscriptions: Part 4 25:30
  44. 44 Test Refactoring 06:16
  45. 45 Thread Subscriptions: Part 5 13:22
  46. 46 Refactoring for the Better or Worse? 10:25
  47. 47 Notification Fakes in a Nutshell 05:21
  48. 48 This Thread Has Been Updated Since You Last Read It 15:55
  49. 49 Spam Detection 11:09
  50. 50 Graduating Inspection Methods to Classes 08:52
  51. 51 Spam Detection At All Ports 06:57
  52. 52 Handling Server Exceptions with JavaScript 10:17
  53. 53 Refactoring to Custom Validation 07:21
  54. 54 A User May Not Reply More Than Once Per Minute 15:11
  55. 55 Refactoring to Form Requests 12:04
  56. 56 Mentioned Users Notifications: Part 1 09:29
  57. 57 Mentioned Users Notifications: Part 2 12:14
  58. 58 Don't Forget to Scan Your Files 08:02
  59. 59 Wrap Usernames Within Anchor Tags 07:35
  60. 60 Instant Username Autocompletion 13:20
  61. 61 Instant Username Autocompletion: Part 2 13:34
  62. 62 Basic View Tweaks 07:49
  63. 63 Testing Avatar Uploads 13:50
  64. 64 Testing Avatar Uploads: Part 2 14:05
  65. 65 AJAX Image Uploads 28:04
  66. 66 Trending Threads With Redis 14:50
  67. 67 Isolating Knowledge 12:15
  68. 68 Thread Views: Design #1 - Trait 09:11
  69. 69 Thread Views: Design #2 - Extract Class 08:24
  70. 70 Thread Views: Design #3 - KISS 07:51
  71. 71 Users Must Confirm Their Email Address: #1 - Protection 09:47
  72. 72 Users Must Confirm Their Email Address: #2 - Confirmation 23:07
  73. 73 Users Must Confirm Their Email Address: #3 - Cleanup 15:17
  74. 74 Email Confirmation Loose Ends 08:03
  75. 75 A Thread Should Have a Unique Slug: Part 1 07:26
  76. 76 A Thread Should Have a Unique Slug: Part 2 11:45
  77. 77 We Need a Regression Test 13:29
  78. 78 Mark the Best Reply: Part 1 14:18
  79. 79 Mark the Best Reply: Part 2 07:58
  80. 80 Refactoring Authorization 06:08
  81. 81 Remembering a Best Reply 10:49
  82. 82 Confusing Errors and Solutions 11:08
  83. 83 Thread Authorization 06:40
  84. 84 An Administrator May Lock Any Thread 08:00
  85. 85 An Administrator May Lock Any Thread: Part 2 16:02
  86. 86 An Administrator May Lock Any Thread: Part 3 11:16
  87. 87 An Administrator May Lock Any Thread: Part 4 11:59
  88. 88 From Laravel 5.4 to Laravel 5.5 09:31
  89. 89 Recaptcha 09:33
  90. 90 Recaptcha Refactoring 12:51
  91. 91 A Thread Can Be Updated 13:34
  92. 92 A Thread Can Be Updated: Part 2 12:44
  93. 93 A Thread Can Be Updated: Part 3 15:22
  94. 94 First Class Search: Scout Review 09:07
  95. 95 First Class Search: Implementation 18:10
  96. 96 First Class Search: Faceting and Ranking 05:01
  97. 97 First Class Search: Instant Results 11:51
  98. 98 First Class Search: Forum Integration 11:02
  99. 99 WYSIWYG 15:29
  100. 100 WYSIWYG: Part 2 12:12
  101. 101 Sanitizing is a Must 19:29
  102. 102 Onward 01:58

Related courses

Frequently asked questions

What is Let's Build A Forum with Laravel and TDD about?
A forum is a deceptively complex thing. Sure, it's made up of threads and replies, but what else might exist as part of a forum? What about profiles, or thread subscriptions, or filtering, or real-time notifications? As it turns out, a…
Who teaches Let's Build A Forum with Laravel and TDD?
Let's Build A Forum with Laravel and TDD is taught by Laracasts. You can find more courses by this instructor on the corresponding source page.
How long is Let's Build A Forum with Laravel and TDD?
Let's Build A Forum with Laravel and TDD contains 102 lessons with a total runtime of 19 hours 30 minutes. All lessons are available to watch online at your own pace.
Is Let's Build A Forum with Laravel and TDD free to watch?
Let's Build A Forum with Laravel and TDD is part of CourseFlix's premium catalog. A CourseFlix subscription unlocks the full video player; the course description, table of contents, and preview information are available to everyone.
Where can I watch Let's Build A Forum with Laravel and TDD online?
Let's Build A Forum with Laravel and TDD is available to watch online on CourseFlix at https://courseflix.net/course/let-s-build-a-forum-with-laravel-and-tdd. The page hosts every lesson with the integrated video player; no download is required.