我使用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']);
});
如何做到这一点,请帮我解决这个问题。
答案 0 :(得分:0)
如documentation中所述,您必须定义一个terminate($request, $response)
方法,以便在响应准备好发送到浏览器后运行中间件。 terminate($request, $response)
方法应该同时接收请求和响应。
然后您可以将中间件添加到global
或route
中间件阵列。
示例:
<?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
}
}