如何捕获laravel控制器异常


How to catch laravel controller exceptions

我是Laravel的新手(我们在工作中使用5.0)。现在,当我们在控制器中响应API请求时,我们一遍又一遍地重写相同的代码来响应未经授权的操作。例如,

public function getUsers(){
  if (Entrust::can('users.view')){
    $users = Users::get();
    return response()->done($users, 200);
  } else {
    return response()->unauthorized('users.view');
  }
}

如果我们有不同的权限来允许一个API请求成功,它会变得越来越复杂。

如果用户不能执行API请求,我想简单地抛出某种异常。例如,

public function getUsers(){
  require('users.view'); // throws an UnauthorizedException if current user doesn't have 'users.view' permission
  $users = User::get();
  return response()->done($users, 200);
}
public function someOtherMethod(){
  if (!Entrust::can('permission1') && !Entrust::can('permission2')){
    throw new UnauthorizedException(['permission1', 'permission2']);
  }
  // some other stuff
}

但是我不知道什么代码调用API函数,也不知道在try/catch中包装该调用的地方。编写UnauthorizedException很容易,并且很容易将其转换为json,但是我在哪里放置处理程序?正如我所说,我是Laravel的新手,我不知道它是如何处理这些异常的。

理想情况下,无论我找到什么解决方案,我都想将其扩展到其他异常,以便我们可以根据常见异常获得一致的json响应。

与其重复代码,不如看看如何使用中间件实现授权检查。