2016-09-21 95 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