Lavavel 5:错误页面中间件无法访问

时间:2015-07-25 06:34:06

标签: laravel laravel-5 laravel-routing

我使用Laravel 5.0并遇到一个问题。当没有像404,500等错误时,我的网站工作正常。但是当我的网站上出现错误时,它会呈现错误页面但是一些中间件没有加载。

我的网站有两个部分前端和后端。这两个部分都有我正在使用的diff-diff中间件。我使用了一些自定义中间件,其中一些是我在前端使用的,其中一些是在后端使用的。但是当站点上出现任何错误时,中间件无法正常工作,这些中间件在Kernel.php文件中的$routeMiddleware数组中加载。

我研究了一些文章,但是所有这些都给了我同样的解决方案来加载$middleware中所有必需的中间件,这对我来说似乎不太好。因为在$middleware数组中,所有中间件都为fronend和backend部分加载。但我需要加载空间中间件只有单个部分。我怎么能实现这一点。

这是我的kernel.php文件

class Kernel extends HttpKernel {
   /**
     * The application's global HTTP middleware stack.
     *
     * @var array
     */
    protected $middleware = [
        'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
        'Illuminate\Cookie\Middleware\EncryptCookies',
        'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
        'Illuminate\Session\Middleware\StartSession',
        'Illuminate\View\Middleware\ShareErrorsFromSession',
        // 'App\Http\Middleware\VerifyCsrfToken',
    ];

    /**
     * The application's route middleware.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => 'App\Http\Middleware\Authenticate',
        'auth.frontend' => 'App\Http\Middleware\FrontendAuthenticate',
        'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    ];
}

这是我的route.php文件代码

Route::group(['middleware' => 'auth.frontend'], function() {
    Route::get('/home', ['as' => 'home', 'uses' => 'HomeController@index']);
    Route::get('/inner_page', ['as' => 'inner_page', 'uses' => 'HomeController@inner_page']);
});

如何做到这一点,请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

documentation中所述,您必须定义一个terminate($request, $response)方法,以便在响应准备好发送到浏览器后运行中间件。 terminate($request, $response)方法应该同时接收请求和响应。

然后您可以将中间件添加到globalroute中间件阵列。

示例:

<?php

namespace App\Http\Middleware;

use Closure;

class FrontendAuthenticate
{
    public function handle($request, Closure $next)
    {
        return $next($request);
    }

    public function terminate($request, $response)
    {
        // Check if the $response is an error and then do stuff 
    }
}