Laravel策略被公式化为返回true或false的can()语句。但是,如果我们不允许某个动作,我们永远不会给出原因(因为该方法只能返回true或false)。我们可以告诉用户他们无法执行此操作 - 而不是为什么他们不能执行此操作。
是否存在制定Laravel策略的既定方法,通知调用者失败的原因?
答案 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
。