28
Custom Namespaces to Organize Your Laravel Controllers
In some cases, when you have too many Controllers in your Laravel project, your
app/Http/Controllers
directory might get cluttered with too many Controllers.To keep things more organized, you could use custom Laravel namespaces to store your Controllers in different directories inside the
app/Http/Controllers
directory.In this tutorial, you will learn how to use a custom namespace for your Laravel Controllers!
Before you start, you would need to have a Laravel application up and running.
I will be using a DigitalOcean Ubuntu Droplet for this demo. If you wish, you can use my affiliate code to get free $100 DigitalOcean credit to spin up your own servers!
If you do not have that yet, you can follow the steps from this tutorial on how to do that:
Or you could use this awesome script to do the installation:
By default, to create a Controller in Laravel, you would run the following
artisan
command:php artisan make:controller DemoController --resource
Note: in case that you are not familiar with the --resource
flag, all that it does is to create a controller with all methods needed for your CRUD.
By default, this would create your controller inside the
app/Http/Controllers/
directory.Now that we've covered that let's learn how to create a controller in a custom namespace!
In order to create a controller in a custom namespace, you would need to use the following command:
php artisan make:controller Demo/DemoController --resource
This will create your DemoController inside a
Demo
directory:app/Http/Controllers/Demo/DemoController.php
Note that we use a slash /
to separate our namespace with our controller.
With that, we are actually creating a namespace as well.
This is quite handy as you don't have to stack all of your Controllers directly inside the
app/Http/Controllers/
directory but instead organize them in a more suitable for you way.Let's edit the file and update the
index
method with a simple return statement. With your text editor of choice, open the app/Http/Controllers/Demo/DemoController.php
and update your index
method as follows:public function index()
{
return "Custom Namespaces are awesome!";
}
Make sure to save the file after the change.
Now that we have our custom namespace in place, let's learn how to set up our routes!
In order to define a route for the custom namespace that we've just created, open the
routes/web.php
file and add the following:Route::namespace('Demo')->group(function() {
});
Thanks to the
namespace
method, we can specify the new custom Demo
namespace.After that, you can add your routes as normal.
Route::namespace('Demo')->group(function() {
Route::resource('demo', DemoController::class);
});
For more information on Laravel Routes, make sure to check out the documentation here.
Now you know how to create a Controller in a custom namespace and keep your controllers well organized.
For more information on Laravel controllers, make sure to check out the official docs here:
If you are just getting started with Laravel, make sure to check out this introduction course here:
28