Laravel Middleware



 Laravel Middleware

What is Middleware in Laravel?

  • Middleware acts as a central man between request and response.
  • It is a type of cleaning mechanism. For example, Laravel contains a middleware that verifies whether user of the application is valid or not.
  • If the user is authenticated, he will be sent to the home page otherwise, he will be redirected to the login page.
  • Middleware can be created by executing the following command
php artisan make:middleware <middleware-name>
  • Replace the <middleware-name> with the name of your middleware. The middleware that you create can be seen at app/Http/Middleware directory.

Example

Step 1

  • Let us now create wikitechy Middleware. To create that, we need to execute the following command
php artisan make:middleware wikitechy Middleware

Step 2

  • After successful execution of the command, you will receive the following output
 Laravel Middleware

Step 3

  • wikitechyMiddleware will be created at app/Http/Middleware. The newly created file will have the following code already created for you.
<?php
namespace App\Http\Middleware;
use Closure;

class wikitechy Middleware {
   public function handle($request, Closure $next) {
      return $next($request);
   }
}
laravel , laravel framework , laravel documentation , laravel tutorial , laravel install , laracasts

Register Middleware

  • We need to register each and every middleware before using it. There are two types of Middleware in Laravel.
    • Global Middleware
    • Route Middleware
  • The Global Middleware will run on every HTTP request of the application, whereas the Route Middleware will be assigned to a specific route.
  • The middleware can be registered at app/Http/Kernel.php
  • This file contains two properties $middleware and $route Middleware. $middleware property is used to register Global Middleware and $route Middleware property is used to register route specific middleware.
  • To register the global middleware, list the class at the end of $middleware property.
protected $middleware = [
   \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
   \App\Http\Middleware\EncryptCookies::class,
   \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
   \Illuminate\Session\Middleware\StartSession::class,
   \Illuminate\View\Middleware\ShareErrorsFromSession::class,
   \App\Http\Middleware\VerifyCsrfToken::class,
];
  • To register the route specific middleware, add the key and value to $route Middleware property.
protected $routeMiddleware = [
   'auth' => \App\Http\Middleware\Authenticate::class,
   'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
   'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];

Example

  • We have created wikitechyMiddleware in the previous example. We can now register it in route specific middleware property. The code for that registration is shown below.
  • The following is the code for app/Http/Kernel.php
app/Http/Kernel.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel {
   protected $middleware = [
      \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
      \App\Http\Middleware\EncryptCookies::class,
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
      \Illuminate\Session\Middleware\StartSession::class,
      \Illuminate\View\Middleware\ShareErrorsFromSession::class,
      \App\Http\Middleware\VerifyCsrfToken::class,
   ];
  
   protected $routeMiddleware = [
      'auth' => \App\Http\Middleware\Authenticate::class,
      'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
      'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
      'Age' => \App\Http\Middleware\AgeMiddleware::class,
   ];
}
laravel , laravel framework , laravel documentation , laravel tutorial , laravel install , laracasts

Middleware Parameters

  • We can also pass parameters with the Middleware. For example, if your application has different roles like user, admin, super admin etc. and you want to authenticate the action based on role, this can be achieved by passing parameters with middleware.
  • The middleware that we create contains the following function and we can pass our custom argument after the $nextargument.
public function handle($request, Closure $next) {
   return $next($request);
}

Example

Step 1

  • Create wikitechy Middleware by executing the following command
php artisan make:middleware wikitechy Middleware

Step 2

  • After successful execution, you will receive the following output
 Laravel Middleware

Step 3

  • Add the following code in the handle method of the newly created RoleMiddlewareat app/Http/Middleware/ RoleMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;

class wikitechy Middleware {
   public function handle($request, Closure $next, $role) {
      echo "Role: ".$role;
      return $next($request);
   }
}

Step 4

  • Register the wikitechy Middleware in app\Http\Kernel.php file. Add the line highlighted in gray color in that file to register wikitechy Middleware.
 Laravel Middleware

Step 5

  • Execute the following command to create TestController
php artisan make:controller TestController --plain

Step 6

  • After successful execution, you will receive the following output
 Laravel Controller

Step 7

  • Copy the following code to app/Http/TestController.php file
    app/Http/TestController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class TestController extends Controller {
   public function index(){
      echo "<br>Test Controller.";
   }
}

Step 8

  • Add the following line of code in app/Http/routes.php file
    app/Http/routes.php
Route::get('role',[
   'middleware' => 'Role:wikitechy',
   'uses' => 'TestController@index',
]);

Step 9

  • Visit the following URL to test the Middleware with parameters
    http://localhost:8000/role

Step 10

  • The output will appear as shown in the following image.
 Role Editor

Terminable Middleware

  • Terminable middleware performs some task after the response has been sent to the browser. This can be accomplished by creating a middleware with "terminate" method in the middleware.
  • Terminable middleware should be registered with global middleware. The terminate method will receive two arguments $request and $response.
  • Terminate method can be created as shown in the following code.

Example

Step 1

  • Create Terminate Middleware by executing the below command.
php artisan make:middleware TerminateMiddleware

Step 2

  • This will produce the following output
 Terminate Middleware

Step 3

  • Copy the following code to app/Http/ABCController.php file app/Http/Middleware/TerminateMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;

class TerminateMiddleware {
   public function handle($request, Closure $next) {
      echo "Executing statements of handle method of TerminateMiddleware.";
      return $next($request);
   }
   
   public function terminate($request, $response){
      echo "<br>Executing statements of terminate method of TerminateMiddleware.";
   }
}

Step4

  • Register the Terminate Middleware in app\Http\Kernel.php file. Add the line highlighted in gray color in that file to register Terminate Middleware.
 Terminate Middleware

Step 5

  • Execute the following command to create ABCController
php artisan make:controller ABCController --plain

Step 6

  • After successful execution of the URL, you will receive the following output
 ABC Controller

Step 7

  • Copy the following code to app/Http/ABCController.php file.
  • app/Http/ABCController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class ABCController extends Controller {
   public function index(){
      echo "<br>Wikitechy controller.";
   }
}

Step 8

  • Add the following line of code in app/Http/routes.php file.
  • app/Http/routes.php
Route::get('terminate',[
   'middleware' => 'terminate',
   'uses' => 'ABCController@index',
]);

Step 9

  • Visit the following URL to test the Terminable Middleware.
  • http://localhost:8000/terminate

Step 10

  • The output will appear as shown in the following image
 ABC Controller

This tutorial is used to learn laravel and also provides guidance on laravel book , laravel books , laravel hosting , laravel programming , laravel server php , laravel server , laravel development server , start laravel server , laravel getting started , laravel programmer , php with laravel for beginners , what is laravel framework in php , up and running with laravel , php framework laravel , getting started with laravel , what is laravel framework , laravel applications , what is laravel in php , laravel hosting , laravel framework , php laravel framework , latest framework in php

Related Searches to Laravel Middleware