您好Laravel 5.4中的异常处理程序有问题。
我在我的控制器中有一个功能,可以检查权限,如:
function foo(){
try{
$this->authorize("bar", MyClass::class);
}catch(AuthorizationException $e){
}
}
在我的handler.php中我有这个:
namespace App\Exceptions;
use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
protected $dontReport = [
\Illuminate\Auth\AuthenticationException::class,
\Symfony\Component\HttpKernel\Exception\HttpException::class,
\Illuminate\Database\Eloquent\ModelNotFoundException::class,
\Illuminate\Session\TokenMismatchException::class,
\Illuminate\Validation\ValidationException::class,
];
public function render($request, Exception $exception)
{
if ($exception instanceof AuthorizationException) {
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthorized.'], 403);
}
// TODO: Redirect to error page instead
}
return parent::render($request, $exception);
}
}
但问题是从不调用处理程序。 但如果我这样做:
function foo(){
try{
throw new AuthorizationException() //test for throw exception
$this->authorize("bar", MyClass::class);
}catch(AuthorizationException $e){
}
}
它将调用处理程序。
那我可以用 $ this-> authorize 处理AuthorizationException吗?
答案 0 :(得分:0)
现在我已经解决了这个问题: 我创建了一个Custom类,扩展了AuthorizationException,如:
namespace App\Exceptions;
namespace Illuminate\Auth\Access;
use Throwable;
class CustomAuthorizationException extends AuthorizationException
{
public function __construct($message = "", $code = 0, Throwable $previous = null)
{
throw new AuthorizationException();
}
}
在控制器中:
function foo(){
try{
$this->authorize("bar", MyClass::class);
}catch(CustomAuthorizationException $e){
}
}
现在它有效,但我不知道这是不是一个好方法。 这些建议很受欢迎!