Laravel 9 How to Create Custom Route File Tutorial

Reading Time: 6 minutes
7,050 Views

If we are building a large web application , then surely we have several routes and their modules. Do we think if we write all routes into a single file i.e web.php then it will be manageable, No it’s not. It will be very tough to manage all routes from one place.

Inside this article, we will see Laravel 9 How To Create Custom Route file. These route files as per application modules.

This article is very interesting to learn. This will be step by step guide for the concept of Custom Route file in laravel tutorial.

Learn More –

Let’s get started.

Laravel Installation

Open terminal and run this command to create a laravel project.

composer create-project laravel/laravel myblog

It will create a project folder with name myblog inside your local system.

To start the development server of laravel –

php artisan serve

URL: http://127.0.0.1:8000

Assuming laravel already installed inside your system.

Route Prefix Example

Let’s say we have an application in which we have modules as Admin, Customer.

If we write all routes all these given two modules into sample route file i.e web.php, so it will look like this:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\CustomerController;

Route::get('/', function () {
    return view('welcome');
});

// Admin Routes
Route::prefix("admin")->group(function(){
   Route::get("create-user", [AdminController::class, "createUser"]);
   Route::get("list-users", [AdminController::class, "listUsers"]);
   Route::get("edit-user", [AdminController::class, "editUser"]);
});

// Customer Routes
Route::prefix("customer")->group(function(){
   Route::get("list-purchase", [CustomerController::class, "listPurchase"]); 
   Route::get("list-blogs", [CustomerController::class, "listBlogs"]);
   Route::get("create-blog", [CustomerController::class, "createBlog"]);
});

//...

For now, we have considered only two modules inside laravel application. But in case for 20 modules and their routes inside web.php file, it will be too much lengthy and messy as well.

Here comes the concept of custom route file in laravel.

Custom Route Files

Custom route files are those files which helps you to manage the application routes module wise and provide the flexibility to manage application.

For example,

Again, we are assuming the same modules as above Admin and Customer.

Create files as admin.php and customer.php as per needed modules into /routes folder.

Open admin.php file from /routes folder. Inside this file we will place all admin related routes.

<?php

use Illuminate\Support\Facades\Route;

// Admin Routes
Route::prefix("admin")->group(function(){
   Route::get("create-user", [AdminController::class, "createUser"]);
   Route::get("list-users", [AdminController::class, "listUsers"]);
   Route::get("edit-user", [AdminController::class, "editUser"]);
});

Open customer.php from /routes folder. Inside this file we will place all customer related routes.

<?php

use Illuminate\Support\Facades\Route;

// Customer Routes
Route::prefix("customer")->group(function(){
   Route::get("list-purchase", [CustomerController::class, "listPurchase"]); 
   Route::get("list-blogs", [CustomerController::class, "listBlogs"]);
   Route::get("create-blog", [CustomerController::class, "createBlog"]);
});

Now,

Successfully, we can see that we have separated each module routes into different different route files. Every route is readable module wise.

Register Custom Route Files

We will register custom route file via RouteServiceProvider.

Open RouteServiceProvider.php file from /app/Providers folder. Add your custom route files here.

<?php

namespace App\Providers;

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider
{
    /**
     * The path to the "home" route for your application.
     *
     * This is used by Laravel authentication to redirect users after login.
     *
     * @var string
     */
    public const HOME = '/home';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::middleware('api')
                ->prefix('api')
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->group(base_path('routes/web.php'));

            // Admin Route file 
            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/admin.php'));

            // Customer Route file
            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/customer.php'));
        });
    }

    /**
     * Configure the rate limiters for the application.
     *
     * @return void
     */
    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
        });
    }
}

Here, as we can see we are using the default middleware web to both route files admin.php and customer.php.

In case if you have some different middleware then you can pass and use it.

All we done !

Application Testing

Run this command into project terminal to start development server,

php artisan serve

Admin URLs:

http://127.0.0.1:8000/admin/create-user and all.

Customer URLs:

http://127.0.0.1:8000/customer/list-purchase and all.

We hope this article helped you to learn about Laravel 9 How to Create Custom Route File in a very detailed way.

Online Web Tutor invites you to try Skillshike! Learn CakePHP, Laravel, CodeIgniter, Node Js, MySQL, Authentication, RESTful Web Services, etc into a depth level. Master the Coding Skills to Become an Expert in PHP Web Development. So, Search your favourite course and enroll now.

If you liked this article, then please subscribe to our YouTube Channel for PHP & it’s framework, WordPress, Node Js video tutorials. You can also find us on Twitter and Facebook.

Sanjay KumarHello friends, I am Sanjay Kumar a Web Developer by profession. Additionally I'm also a Blogger, Youtuber by Passion. I founded Online Web Tutor and Skillshike platforms. By using these platforms I am sharing the valuable knowledge of Programming, Tips and Tricks, Programming Standards and more what I have with you all. Read more