1
Laravel策略制定爲can()語句,返回true或false。但是,如果我們不允許採取行動,我們永遠不會被給出理由(因爲該方法只能返回真或假)。我們可以告訴用戶的是,他們不能執行此操作 - 不是爲什麼他們不能。Laravel Policy可以告訴用戶/呼叫者爲什麼失敗?
有沒有一種制定Laravel策略的方法可以告訴調用者它爲什麼失敗?
Laravel策略制定爲can()語句,返回true或false。但是,如果我們不允許採取行動,我們永遠不會被給出理由(因爲該方法只能返回真或假)。我們可以告訴用戶的是,他們不能執行此操作 - 不是爲什麼他們不能。Laravel Policy可以告訴用戶/呼叫者爲什麼失敗?
有沒有一種制定Laravel策略的方法可以告訴調用者它爲什麼失敗?
你可以做的是拋出例如:
Illuminate\Auth\Access\AuthorizationException('Message why fails');
在政策失敗的地方
。如果您在App\Exceptions\Handler
中定義了此異常,那麼它將通過AuthorizationException
響應具有給定消息的請求。
如果我做了這樣的事情,我是否仍然可以像Gate :: check()那樣做一些事情,而不必將它封裝在try-catch中?編輯:我看了Gate :: check()的定義,它確實將它的調用包裝在try-catch中,但它只捕獲AuthorizationExceptions,所以任何拋出策略的異常都應該是AuthorizationException(或從它繼承)。我會將您的答案標記爲已接受,謝謝! – quakes