frenchbaguette
frenchbaguette

Reputation: 1339

Error adding IP whitelist to Laravel 5 maintenance mode

I'm configuring maintenance mode in Laravel. I'm trying to add in an IP whitelist.

When I run this code:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckForMaintenanceMode
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
     public function handle($request, Closure $next)
     {
         if ($this->app->isDownForMaintenance() &&
             !in_array($request->getClientIP(), ['127.0.0.1']))
         {
             return response('Be right back!', 503);
         }

         return $next($request);
     }
}

I get this error:

Undefined property: App\Http\Middleware\CheckForMaintenanceMode::$app

Can someone tell me what's the problem is?

Upvotes: 3

Views: 3449

Answers (1)

patricus
patricus

Reputation: 62228

Update

As of Laravel 5.6.21, this functionality is now built into Laravel. The php artisan down command now takes --allow parameters which lets you specify the IP addresses to allow to access the site.

So, instead of making any customizations, you'd just need to run php artisan down --allow=127.0.0.1.

Original

You're using $this->app, but your class doesn't have an $app property. You can either just use the app() helper method, you can inject the Application into your middleware, or you can extend Laravel's CheckForMaintenanceMode class, which will take care of all that for you.

Extend Laravel:

class CheckForMaintenanceMode extends \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode

Dependency Injection:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Foundation\Application;

class CheckForMaintenanceMode
{
    /**
     * The application implementation.
     *
     * @var \Illuminate\Contracts\Foundation\Application
     */
    protected $app;

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Foundation\Application  $app
     * @return void
     */
    public function __construct(Application $app)
    {
        $this->app = $app;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
     public function handle($request, Closure $next)
     {
         if ($this->app->isDownForMaintenance() &&
             !in_array($request->getClientIP(), ['127.0.0.1']))
         {
             return response('Be right back!', 503);
         }

         return $next($request);
     }
}

app() Helper

 public function handle($request, Closure $next)
 {
     if (app()->isDownForMaintenance() &&
         !in_array($request->getClientIP(), ['127.0.0.1']))
     {
         return response('Be right back!', 503);
     }

     return $next($request);
 }

Upvotes: 5

Related Questions