仅为Laravel 5中的一个环境启用全局中间件

rap*_*2-h 12 php laravel composer-php laravel-5

我在Laravel 5(barryvdh/laravel-cors)中使用了全局中间件,但我只希望它在一个环境(dev)上运行.那是因为我只需要在开发环境中使用composer,因此它不会安装在生产环境中.

我注册了它在App Kernel中有一个全局中间件,所以如果我尝试在production(Class 'Barryvdh\Cors\CorsServiceProvider' not found)中部署我的应用程序,我会出错.我知道为什么,但我正在寻找解决方案.

有没有办法在laravel 5中全局声明中间件,但只在一个环境中需要?

我希望它足够清楚,如果不是我可以编辑我的帖子:)

ral*_*ino 7

为此,只需在服务提供商中加载内核,然后调用pushMiddlewareprependMiddleware

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot(Kernel $kernel)
    {
        if ($this->app->environment() === 'dev') {
            $kernel->prependMiddleware(ClockworkMiddleware::class);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 1

到目前为止我发现的最好方法是检查内核中的 env('APP_ENV')

public function __construct(Application $app, Router $router)
{
    if (env('APP_ENV', 'production') === 'local') {
        $this->prependMiddleware('Clockwork\Support\Laravel\ClockworkMiddleware');
    }

    parent::__construct($app, $router);
}
Run Code Online (Sandbox Code Playgroud)

  • 应该是“App::isLocal()”。 (4认同)