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
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:
Creating a standard controller
By default, to create a Controller in Laravel, you would run the following
php artisan make:controller DemoController --resource
Note: in case that you are not familiar with the
--resourceflag, 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
Now that we've covered that let's learn how to create a controller in a custom namespace!
Creating 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
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!
Routing to the custom namespace
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:
Thanks to the
namespace method, we can specify the new custom
After that, you can add your routes as normal.
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: