在我的Laravel 5.2应用程序中,我有一个名为“购物车”的自定义中间件。我用它来跟踪不同路线上的用户购物车内容。
看起来像这样:
class CartMiddleware
{
public function handle($request, Closure $next)
{
$cart = new Cart();
$cart_total = $cart->total();
view()->composer(['layouts.main'], function ($view) use ($cart_total) {
$view->with('cart_total', $cart_total);
});
return $next($request);
}
}
Route::group(['middleware' => ['cart']], function () {
Route::get('cart', 'CartController@show');
});
当我的应用程序引发404异常时,404.blade.php视图无法呈现,因为它缺少由“购物车”提供的$cart_total
。中间件。
有没有办法分配这个'购物车'中间件到我的例外?
if ($e instanceof HttpException) {
if ($request->ajax()) {
return response()->json(['error' => 'Not Found'], 404);
}
return response()->view('errors.404', [], 404);
}
return parent::render($request, $e);
答案 0 :(得分:0)
在Laravel 5.4和可能的旧版本中,您可以像这样修改文件app/exceptions/Handler.php
和函数render
:
if( is_a( $exception, \Symfony\Component\HttpKernel\Exception\NotFoundHttpException::class ) ) {
return redirect()->route( 'error_404' );
}
// ... old code in the function ...
通过这种方式,每个404错误都会被重定向到某个真实路由,就像其他站点路径一样。
您也可以提交当前请求中的任何数据,以便在目标位置显示合理的错误。