How to create a Middleware in Laravel using PHP Artisan Command

Posted on

This article is written to specify on how to create a middleware in Laravel using PHP Artisan command. The command which is actually a tool provided exists and it is located in the root folder of a Laravel web-based application project.

But before creating a middleware in Laravel, just what exactly a middleware is ?. As shown in the documentation page of Laravel, it is stated that middleware is a means or a way which is provided to facilitate for filtering HTTP requests entering the application. It is providing a convenient mechanism for filtering based on for an example whether the user which is sending request has already been authenticated or not.

Normally, in a Laravel-based web application project, the artisan utility which can be executed in a command-line interface is provided. Just execute the following command in the root folder of a Laravel-based web application project :

php artisan

The output of the above command can be shown as follows :

user@hostname:/var/www/html/laravel$ php artisan 
Laravel Framework 5.5.4

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
      --env[=ENV]       The environment the command should run under
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  clear-compiled       Remove the compiled class file
  down                 Put the application into maintenance mode
  env                  Display the current framework environment
  help                 Displays help for a command
  inspire              Display an inspiring quote
  list                 Lists commands
  migrate              Run the database migrations
  optimize             Optimize the framework for better performance (deprecated)
  preset               Swap the front-end scaffolding for the application
  serve                Serve the application on the PHP development server
  tinker               Interact with your application
  up                   Bring the application out of maintenance mode
 app
  app:name             Set the application namespace
 auth
  auth:clear-resets    Flush expired password reset tokens
 cache
  cache:clear          Flush the application cache
  cache:forget         Remove an item from the cache
  cache:table          Create a migration for the cache database table
 config
  config:cache         Create a cache file for faster configuration loading
  config:clear         Remove the configuration cache file                                                                                                                                                                        
 db                                                                                                                                                                                                                               
  db:seed              Seed the database with records                                                                                                                                                                             
 event                                                                                                                                                                                                                            
  event:generate       Generate the missing events and listeners based on registration                                                                                                                                            
 key                                                                                                                                                                                                                              
  key:generate         Set the application key                                                                                                                                                                                    
 make                                                                                                                                                                                                                             
  make:auth            Scaffold basic login and registration views and routes                                                                                                                                                     
  make:command         Create a new Artisan command                                                                                                                                                                               
  make:controller      Create a new controller class                                                                                                                                                                              
  make:event           Create a new event class                                                                                                                                                                                   
  make:factory         Create a new model factory                                                                                                                                                                                 
  make:job             Create a new job class                                                                                                                                                                                     
  make:listener        Create a new event listener class                                                                                                                                                                          
  make:mail            Create a new email class                                                                                                                                                                                   
  make:middleware      Create a new middleware class
  make:migration       Create a new migration file
  make:model           Create a new Eloquent model class
  make:notification    Create a new notification class
  make:policy          Create a new policy class
  make:provider        Create a new service provider class
  make:request         Create a new form request class
  make:resource        Create a new resource
  make:rule            Create a new validation rule
  make:seeder          Create a new seeder class
  make:test            Create a new test class
 migrate
  migrate:fresh        Drop all tables and re-run all migrations
  migrate:install      Create the migration repository
  migrate:refresh      Reset and re-run all migrations
  migrate:reset        Rollback all database migrations
  migrate:rollback     Rollback the last database migration
  migrate:status       Show the status of each migration
 notifications
  notifications:table  Create a migration for the notifications table
 package
  package:discover     Rebuild the cached package manifest
 queue
  queue:failed         List all of the failed queue jobs
  queue:failed-table   Create a migration for the failed queue jobs database table
  queue:flush          Flush all of the failed queue jobs
  queue:forget         Delete a failed queue job
  queue:listen         Listen to a given queue
  queue:restart        Restart queue worker daemons after their current job
  queue:retry          Retry a failed queue job
  queue:table          Create a migration for the queue jobs database table
  queue:work           Start processing jobs on the queue as a daemon
 route
  route:cache          Create a route cache file for faster route registration
  route:clear          Remove the route cache file
  route:list           List all registered routes
 schedule
  schedule:run         Run the scheduled commands
 session
  session:table        Create a migration for the session database table
 storage
  storage:link         Create a symbolic link from "public/storage" to "storage/app/public"
 vendor
  vendor:publish       Publish any publishable assets from vendor packages
 view
  view:clear           Clear all compiled view files
user@hostname:/var/www/html/laravel$

So, in order to create a middleware, just type the following command using php artisan tool :

user@hostname:/var/www/html/laravel$ php artisan make:middleware AdminMiddleware
Middleware created successfully.
user@hostname:/var/www/html/laravel$

The middleware in this case will created and it will be stored normally in a path of ‘app/Http/Middleware’.

user@hostname:/var/www/html/laravel/app/Http/Middleware$ pwd
/var/www/html/laravel/app/Http/Middleware
user@hostname:/var/www/html/laravel/app/Http/Middleware$ ls -al
total 32
drwxrwxr-x 2 www-data user 4096 Nov  3 08:02 .
drwxrwxr-x 4 www-data user 4096 Aug 30 16:55 ..
-rw-rw-r-- 1 user     user  335 Nov  3 08:02 AdminMiddleware.php
-rwxrwxr-x 1 www-data user  294 Aug 30 16:55 EncryptCookies.php
-rwxrwxr-x 1 www-data user  523 Aug 30 16:55 RedirectIfAuthenticated.php
-rwxrwxr-x 1 www-data user  340 Aug 30 16:55 TrimStrings.php
-rwxrwxr-x 1 www-data user  697 Aug 30 16:55 TrustProxies.php
-rwxrwxr-x 1 www-data user  307 Aug 30 16:55 VerifyCsrfToken.php
user@hostname:/var/www/html/laravel/app/Http/Middleware$

Where in the context of the above output, the root folder of the Laravel-based web application project is in the ‘/var/www/html/laravel’.

One thought on “How to create a Middleware in Laravel using PHP Artisan Command

Leave a Reply