2013-03-31 53 views
1

默認/降級「未知的資源」的錯誤,Catalyst::Dispatch發出當一個未知的資源(本質上是一個404錯誤,通過我的理解)要求的錯誤:如何抑制來自催化劑

代表派遣到匹配的網址,或者返回有關未知的資源

而我的應用程序的日誌文件的消息操作說明:

Mar 30 10:19:08 mail myapp: Unknown resource "user/soapCaller.bs" 
Mar 30 16:20:38 mail myapp: Unknown resource "HTTP/1.1" 
Mar 30 16:20:38 mail myapp: Unknown resource "index.php" 

可以說,這對我來說似乎是一個錯誤;一個簡單的404不應該被認爲與「無法連接到數據庫」錯誤一致,但那不是重點。我的問題是:

我該如何改變這種行爲?

我已經有限的成功與創建一個簡單的默認()行動Root.pm:

sub default : Private { 
    my ($self, $c) = @_; 
} 

這成功地沉默了錯誤日誌文件,但是,我沒有成功的寫作我自己的日誌消息/優先級。以下任何嘗試都不會輸出我自己的警告。

sub default : Private { 
    my ($self, $c) = @_; 
    warn "Foo\n"; 
    $c->log->debug('Bar'); 
    $c->log->warn('Baz'); 
} 

那麼在Catalyst應用程序中定義我自己的「未知資源」行爲的最佳方法是什麼?

+1

創建一個默認的根是正確的做法(雖然'sub default:Private'是古老的棄用練習;'sub default:Path'會做得很好......)。至於爲什麼你的記錄器不工作,我們需要更多的信息。從你所展示的內容來看,沒有理由不這樣做。 – hobbs

+0

@hobbs:我已經切換到'路徑',並且行爲是相同的。您需要關於日誌記錄的其他信息?我使用'LogWarnings'和'LogDispatch'插件。 – Flimzy

回答

0

問題是我有一個auto()動作,它在default()之前運行,並被重定向到另一個頁面。

sub auto : Private { 
    my ($self, $c) = @_; 
    ... 
    if (! $c->user_exists) { 
     $c->redirect($c->uri_for('/login')); 
    } 
} 

我能夠加入到解決此問題:

return 1 if $c->action eq 'default'; 
重定向前