我如何处理404自定义页面(可能还有其他错误)?
我刚试过路由部分添加
GET /@codes /WebController->error
我的Class WebController处理错误,而404我解决了(部分)。实际上它适用于
http://mydomain.ext/itdoesntexists
但如果我记得
http://mydomain.ext/sub/maybe_another_sub/and_so_on/doesnt_exist
我的路线(当然)不起作用。
顺便说一下,在这种情况下,它不会推动404标题(只是对事物的疯狂视觉,我正在考虑谷歌寻找资源而它没有收到“纯粹的”404)。谢谢
答案 0 :(得分:24)
您无需为此定义路线。 F3将自动为任何未定义的路线生成404状态代码。
如果要定义自定义错误页面,则需要设置ONERROR变量。
这是一个简单的例子:
$f3->route('GET /','App->home');
$f3->set('ONERROR',function($f3){
echo \Template::instance()->render('error.html');
});
$f3->run();
将error.html定义为:
<!DOCTYPE html>
<head>
<title>{{@ERROR.text}}</title>
</head>
<body>
<h1>{{@ERROR.text}}</h1>
<p>Error code: {{@ERROR.code}}</p>
</body>
</html>
现在,如果您调用任何未定义的路径,例如/ foo,模板error.html将使用404状态代码进行呈现。
注意:这适用于其他错误代码。其他错误代码由F3或您的应用程序使用命令$f3->error($status)
触发,$ status是任何有效的HTTP状态代码(404,500,403等等)