我使用控制器为页面做一些自定义uri路由,它目前工作得很好。
这是控制器的精简版本,它使用PHPTAL作为模板引擎。
public function index()
{
$this->tal->display('index');
}
public function view($url)
{
$this->loadView($url);
}
private function loadView($url)
{
if (file_exists(ROOTPATH . 'webroot/' . $url . '/index.html'))
{
$this->tal->display($url . '/index');
}
else
{
show_404();
}
}
我最近注意到,每次访问页面控制器时,我的日志中都出现以下错误:
ERROR - 2013-02-06 10:58:23 --> 404 Page Not Found -->
我发现这很奇怪,因为页面按预期显示,并且肯定没有404标题,并且网络面板没有404状态。
我最终将其缩小到show_404()
方法中调用的loadView()
辅助方法。删除该行可以阻止错误完全出现在日志文件中。
只有在找不到视图文件时才应执行此§show_404()§,在这种情况下,它应该显示404错误页面。但是,无论是否调用loadView()
方法,该方法的日志记录部分似乎都是在每次调用页面控制器时执行的。
我在浏览器中访问index()
视图,一切似乎都正常,加载了正确的视图文件,没有错误。但是,loadView()
方法会记录404错误消息。 loadView()
方法甚至没有从index()
方法调用,但是日志文件中输出的存在似乎表明它正在被执行。
答案 0 :(得分:6)
show_404
的默认行为是insert a log entry when its called。还有第二个可选参数可以禁用它,所以如果您只想显示404页面而不记录它,请调用它:
show_404('', false);
第一个参数是将在日志中的-->
之后附加的字符串,因此您也可以将其保留为空。
_loadView
函数:如果您使用的网址中没有index.php
(空$config['index_page']
),那么网络服务器服务器无法找到的每个静态资产(图像,js,css等)(取决于具体的重写规则)将传递给php脚本,并可能在那里生成404错误。