Laravel策略可以告诉用户/调用者它失败的原因吗?

时间:2016-09-21 06:31:21

标签: laravel laravel-5

Laravel策略被公式化为返回true或false的can()语句。但是,如果我们不允许某个动作,我们永远不会给出原因(因为该方法只能返回true或false)。我们可以告诉用户他们无法执行此操作 - 而不是为什么他们不能执行此操作。

是否存在制定Laravel策略的既定方法,通知调用者失败的原因?

2 个答案:

答案 0 :(得分:1)

你能做的就是举例:

 Illuminate\Auth\Access\AuthorizationException('Message why fails');

在政策失败的地方。如果您在App\Exceptions\Handler中定义了此异常,那么它将通过AuthorizationException使用给定的消息响应请求。

答案 1 :(得分:1)

Laravel中的每个策略默认都使用Illuminate\Auth\Access\HandlesAuthorization特征。

此特征包含有用的方法deny。如果要说明用户操作失败的原因-您可以直接在策略内部调用$this->deny('Your reason')

在引擎盖下,它会抛出Illuminate\Auth\Access\AuthorizationException,因此公认的答案也没有错。

如果由于某些原因您对AuthorizationException不满意,则可以直接抛出AnyCustomException