2016-09-21 93 views
1

Laravel策略制定为can()语句,返回true或false。但是,如果我们不允许采取行动,我们永远不会被给出理由(因为该方法只能返回真或假)。我们可以告诉用户的是,他们不能执行此操作 - 不是为什么他们不能。Laravel Policy可以告诉用户/呼叫者为什么失败?

有没有一种制定Laravel策略的方法可以告诉调用者它为什么失败?

回答

1

你可以做的是抛出例如:

Illuminate\Auth\Access\AuthorizationException('Message why fails'); 
在政策失败的地方

。如果您在App\Exceptions\Handler中定义了此异常,那么它将通过AuthorizationException响应具有给定消息的请求。

+0

如果我做了这样的事情,我是否仍然可以像Gate :: check()那样做一些事情,而不必将它封装在try-catch中?编辑:我看了Gate :: check()的定义,它确实将它的调用包装在try-catch中,但它只捕获AuthorizationExceptions,所以任何抛出策略的异常都应该是AuthorizationException(或从它继承)。我会将您的答案标记为已接受,谢谢! – quakes