2015-05-16 72 views
0

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

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响应。

+0

我刚开始深入研究Laravel 5,但如果这是在多条路线上运行的东西,我会考虑中间件。 – mAAdhaTTah

+0

这正是我所需要的(我得到它的工作)。如果你为这个效果添加一个答案,我会接受它,并评论我采取的确切步骤。 – whiterook6

+0

完成 - 很高兴你的工作! – mAAdhaTTah

回答

2

而不是重复您的代码,看看实施与中间件的授权检查。