17
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:
17