为什么在laravel 6.x全局中间件使用throw捕获错误报500错误?
为什么在laravel 6.x全局中间件使用throw捕获错误报500错误?
代码如下
app\Http\Middleware\CheckPermission.php
<?php
namespace App\Http\Middleware;
use Closure;
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
class CheckPermission
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (true) {
throw new UnauthorizedHttpException("登录状态失效");
}
return $next($request);
}
}
Kernel.php
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
// 自定义跨域
\App\Http\Middleware\CrossHttp::class,
// 自定义检验权限
\App\Http\Middleware\CheckPermission::class,
];
报错如下
只要我不使用全局中间件,使用路由中间件就不会报http状态码500(ps:路由那些是对的)。贴图如下,所以想请教各位大佬,我要在全局中间件怎捕获错误呢?
@zhaojjiang 那为什么路由中间件的时候不需要
try{}catch{}
.不是在最上层会捕获异常吗?