5

我使用控制器为页面做一些自定义 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()在浏览器中访问视图,一切正常,加载了正确的视图文件,没有错误。但是,该方法会记录 404 错误消息loadView()。该loadView()方法甚至没有被该index()方法调用,但其输出在日志文件中的存在似乎表明它正在被执行。

4

1 回答 1

6

的默认行为show_404在调用时插入一个日志条目。还有第二个可选参数可以禁用它,所以如果你只想显示 404 页面而不记录它,可以这样调用它:

show_404('', false);

第一个参数是将附加在-->日志中的字符串,因此您也可以将其留空。

至于为什么_loadView可能会调用该函数:

如果您使用的 url 没有index.php它们(空$config['index_page']),那么网络服务器服务器找不到的每个静态资产(图像、js、css 等)(取决于具体的重写规则)将被传递给 php 脚本,并且可能在那里生成 404 错误。

于 2013-02-06T07:23:49.113 回答