将 IP 白名单添加到 Laravel 5 维护模式时出错

zlo*_*tte 3 php laravel

我正在 Laravel 中配置维护模式。我正在尝试添加 IP 白名单。

当我运行此代码时:

<?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);
     }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

未定义的属性:App\Http\Middleware\CheckForMaintenanceMode::$app

有人可以告诉我有什么问题吗?

pat*_*cus 5

更新

从 Laravel 5.6.21 开始,此功能现已内置到 Laravel 中。该php artisan down命令现在采用--allow参数,可让您指定允许访问站点的 IP 地址。

因此,无需进行任何自定义,您只需要运行php artisan down --allow=127.0.0.1.

原来的

您正在使用$this->app,但您的班级没有$app属性。您可以只使用app()辅助方法,也可以将 注入Application到您的中间件中,或者您可以扩展 Laravel 的CheckForMaintenanceMode类,它会为您处理所有这些。

扩展 Laravel:

class CheckForMaintenanceMode extends \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode
Run Code Online (Sandbox Code Playgroud)

依赖注入:

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);
     }
}
Run Code Online (Sandbox Code Playgroud)

应用程序()助手

 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);
 }
Run Code Online (Sandbox Code Playgroud)