About this course
Structuring Laravel projects is one of the most typical questions I see in the community. The reason is that, for better or worse, Laravel has many options to do that!
- Services?
- Actions?
- Jobs?
- Observers?
- Mutators?
- Events/listeners?
- Traits?
- Helpers?
- Modules?
- Components?
- Packages?
In this course, I will provide an overview of the main options with real-life examples from open-source projects.
We will discuss:
- Where to offload logic from the Controller to make it shorter
- How to structure admin/user areas
- Is it worth dividing the app into modules
- When is it time to create re-usable packages
- ... and more
As a practical example, we will try to shorten this Controller method:
public function store(Request $request)
{
$this->authorize('user_create');
$userData = $request->validate([
'name' => 'required',
'email' => 'required|unique:users',
'password' => 'required',
]);
$userData['start_at'] = Carbon::createFromFormat('m/d/Y', $request->start_at)->format('Y-m-d');
$userData['password'] = bcrypt($request->password);
$user = User::create($userData);
$user->roles()->sync($request->input('roles', []));
Project::create([
'user_id' => $user->id,
'name' => 'Demo project 1',
]);
Category::create([
'user_id' => $user->id,
'name' => 'Demo category 1',
]);
Category::create([
'user_id' => $user->id,
'name' => 'Demo category 2',
]);
MonthlyReport::where('month', now()->format('Y-m'))->increment('users_count');
$user->sendEmailVerificationNotification();
$admins = User::where('is_admin', 1)->get();
Notification::send($admins, new AdminNewUserNotification($user));
return response()->json([
'result' => 'success',
'data' => $user,
], 200);
}
For more complex topics, I intentionally used the word overview above. This course aims to show you the options, but each option is a "rabbit hole," often requiring an entirely separate course on that specific pattern.
So, at the end of the course, you will see a lesson with extra links to other resources from myself and the community if you choose to dive deeper into some structure topics.
A few testimonials from students:
Now, let's start our journey with the lesson Validation to Form Request.