2013-11-04 77 views
4

我如何處理我的404自定義頁面(可能還有其他錯誤)?無脂框架(F3):自定義404頁面(和其他錯誤)

我只是試圖在路由部分添加

GET /@codes /WebController->error 

我的學生WebController處理錯誤,併爲404我解決了(部分)。實際上它適用於

http://mydomain.ext/itdoesntexists 

但如果我還記得一個

http://mydomain.ext/sub/maybe_another_sub/and_so_on/doesnt_exist 

我的路線(當然)是行不通的。

順便說一句,在每種情況下,它不會推送404頭(只是一個瘋狂的事情,我在想Google尋找資源,它沒有收到一個「純粹」的404) 。

謝謝

回答

18

您不必爲此定義路由。 F3會自動爲任何未定義的路線生成404狀態碼。

如果要定義自定義錯誤頁面,則需要設置ONERROR變量。

這裏有一個簡單的例子:

$f3->route('GET /','App->home'); 
$f3->set('ONERROR',function($f3){ 
    echo \Template::instance()->render('error.html'); 
}); 
$f3->run(); 

的error.html與定義爲:如果你調用像/ foo的任何非規定路線

<!DOCTYPE html> 
<head> 
<title>{{@ERROR.text}}</title> 
</head> 
<body> 
    <h1>{{@ERROR.text}}</h1> 
    <p>Error code: {{@ERROR.code}}</p> 
</body> 
</html> 

現在,模板會的error.html是以404狀態碼呈現。

注意:這適用於其他錯誤代碼。其他錯誤代碼由F3或您的應用程序使用命令$f3->error($status)觸發,$ status是任何有效的HTTP狀態代碼(404,500,403等)。

+4

完美!簡單和.........免費的脂肪! :D – sineverba

+0

有沒有辦法將onerror調用路由到控制器方法? – aalaap

+2

當然:'$ f3-> set('ONERROR','Controller-> method');'。 – xfra35