Laravel 将AuthorizationException绑定到自定义异常(或重写AuthorizationException的呈现方法)
自从Laravel5.5以来,我们现在有了异常的渲染方法,我想利用它。 所以我想覆盖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 {
<?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();
}
}
}