假設我在 a 中有以下操作Catalyst::Controller,需要存在引數bar。如果查詢中未給出此引數,我想顯示一條錯誤訊息:
sub foo : Local {
my ($self, $c) = @_;
if (!$c->req->params->{bar}) {
$c->stash->{error} = "Parameter 'bar' missing!";
$c->detach; # or return; ?
}
# some more logic...
}
現在我的問題是:無論是我做$c->detach還是僅僅return從行動中都有區別嗎?乍一看,行為似乎是相同的,但是這兩種選擇有什么優點或缺點嗎?
uj5u.com熱心網友回復:
根據以下檔案detach():
與 相同
forward(),但處理完成后不回傳上一個動作。當不帶引數呼叫時,它會完全避開處理鏈。
檢查源代碼,參見第 278 行,我們看到它detach()引發了Catalyst::Exception::Detach例外,因此永遠不會回傳給呼叫者。
所以 using和呼叫從 action sub 中回傳$c->detach()是不一樣的。return呼叫return將繼續動作處理鏈,而$c->detach()不會。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506250.html
下一篇:如何獲取陣列中最大元素的索引?
