Laravel 将AuthorizationException绑定到自定义异常(或重写AuthorizationException的呈现方法)

Laravel 将AuthorizationException绑定到自定义异常(或重写AuthorizationException的呈现方法),laravel,laravel-5.5,Laravel,Laravel 5.5,自从Laravel5.5以来,我们现在有了异常的渲染方法,我想利用它。 所以我想覆盖AuthorizationException,只重定向到默认页面。问题是,它不起作用 我们有新的定制例外 <?php namespace App\Exceptions; use Illuminate\Auth\Access\AuthorizationException; class CustomAuthorizationException extends AuthorizationException {

自从Laravel5.5以来,我们现在有了异常的渲染方法,我想利用它。 所以我想覆盖AuthorizationException,只重定向到默认页面。问题是,它不起作用

我们有新的定制例外

<?php
namespace App\Exceptions;
use Illuminate\Auth\Access\AuthorizationException;

class CustomAuthorizationException extends AuthorizationException
{
    public function render()
    {
        return redirect(route('dashboard'));
    }
}
分别位于AppServiceProvider和bootstrap/app.php中


任何提示或帮助都将不胜感激。

如果您使用Laravel Gate进行访问控制,则会在/Auth/access/handleAuthorization中引发“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()函数,其中用户将重定向到自定义页面。

只需让异常处理程序处理该异常,它是一个框架异常,你不是扔东西的人,也不是控制扔到那里的东西的人。这些问题并不是从容器中解决的。是的,我们可以做到这一点(我们在5.5之前就做到了),但我们将自己的异常重构为5.5“标准”(比如说新功能),并希望保持一致。编辑:如果无法扩展默认的异常,那么我想就别无选择了。。。但是必须有一个方法:/任何人都可以帮助吗?我知道,这就是我们在5.4中所做的,所以我想在更新到5.5的同时对其进行重组。无论如何,谢谢你:)
class Handler extends ExceptionHandler
{
    public function render($request, Exception $exception)
    {
       if ($exception instanceof AuthorizationException) {
           return (new CustomAuthorizationException)->render();
       }
    }
}