我们现在有自Laravel 5.5之后的异常渲染方法,我想利用它。 所以我想覆盖AuthorizationException,只是重定向到默认页面。问题是,它不起作用。
我们有新的自定义异常
<?php
namespace App\Exceptions;
use Illuminate\Auth\Access\AuthorizationException;
class CustomAuthorizationException extends AuthorizationException
{
public function render()
{
return redirect(route('dashboard'));
}
}
如果我抛出CustomAuthorizationException,一切正常,重定向就会发生 然后我尝试将正常的AuthorizationException绑定到那个自定义的,但我不知道在哪里。 我试过了两个
$this->app->singleton('\Illuminate\Auth\Access\AuthorizationException', '\App\Exceptions\CustomAuthorizationException');
$this->app->bind('\Illuminate\Auth\Access\AuthorizationException', '\App\Exceptions\CustomAuthorizationException');
分别在AppServiceProvider和bootstrap / app.php中。
任何提示或帮助都将不胜感激。
答案 0 :(得分:1)
如果您使用Laravel Gate进行访问控制,则会在特征Illuminate / Auth / Access / HandlesAuthorization中抛出类型'AuthorizationException'的异常。由于它是在框架中完成的,因此无法“覆盖”'AuthorizationException'类并期望框架根据需要抛出自定义异常。
但是,在app / Exception / Handler.php中劫持异常处理有一种解决方法:
class Handler extends ExceptionHandler
{
public function render($request, Exception $exception)
{
if ($exception instanceof AuthorizationException) {
return (new CustomAuthorizationException)->render();
}
}
}
通过在render()函数中添加条件处理程序,“AuthroizationExeption”类型的异常将被重定向到自定义render()函数,在该函数中用户将被重定向到自定义页面。