详细信息如下:Need assistance with Kohana 3 and catch all route turning into a 404 error作为问题的接受答案,我试图捕捉Kohana抛出的错误,以显示漂亮的错误页面并发送正确的HTTP代码。
以下是演示此问题的简化版本:
try {
// Instantiate your Request object
$request = Request::instance();
// The give it a try, to see if its a valid request
$request->execute();
}
catch (Kohana_Request_Exception $e) {
header('Content-Type: text/html; charset='.Kohana::$charset, TRUE, 404);
echo Request::factory('err/404')->send_headers()->execute()->response;
exit;
}
echo $request->send_headers()->response;
所以我导航到一个不存在的网址,例如http://example.local/moo/,我得到以下回复
Kohana_Request_Exception [ 0 ]: Unable to find a route to match the URI: moo
以下是正在发生的事情 - 请求正在尝试,失败时出现Kohana_Request_Exception,被捕获但是当我尝试构建新的请求对象时,Request::factory('err/404')
该请求会抛出我第一次请求的错误....! WTF ??
我已经摆弄了一个小时,我感到困惑,就像我开始时一样。不应该来自工厂的新请求不知道旧请求?当我从d00d的答案中复制它时,为什么这段代码出现故障?
// Release version and codename
const VERSION = '3.0.7';
const CODENAME = 'hattrick';
有人指出我正确的方向..那些人。
答案 0 :(得分:0)
这是因为在Request::factory('err/404')
内,err/404
部分是一个尝试与您的路线匹配的网址。会不会匹配,即你有这样的路线......
Route::set('errors', 'err/<action>', array('action' => '404|500')) {}
您还应该通过...发送404
$request->status = 404;
答案 1 :(得分:0)
啊哈!谢谢大家,但我明白了..我应该仔细看看堆栈跟踪,错误页面的模板控制器的before()
方法在尝试使用Request::instance()
检查身份验证时抛出了新错误将其更改为Request::current()
并且它都闪亮。
感谢您的帮助!