我有一个特别复杂的CakePHP(1.3)设置。我发现了一个非常令人费解的行为,显然与视图缓存有关。
我正在缓存使用requestAction获取动态导航的两个视图文件。如果我从文件系统中删除这些缓存文件中的一个或两个,浏览器会挂起一段时间然后吐出错误页面:
页面未正确重定向
Firefox检测到服务器正在以永远无法完成的方式重定向此地址的请求。
有时可能会因禁用或拒绝接受Cookie而导致此问题。
Apache本身并没有记录任何奇怪的错误,因为如果它以某种方式陷入无限循环,就像Firefox认为的那样,肯定会出现在日志中?如果我放回缓存文件,Cake会正常显示所有内容。
发生了什么事?以前有人遇到过这样的事吗?
请求操作调用如下所示:
<?php
$topnav = $this->requestAction('/pages/getDynamicTopMenu');
foreach($topnav as $item):
if($item['Page']['title'] == 'Home') {
echo '<li class="'.$item['Page']['slug'].'">'.$this->Html->link($item['Page']['title'].'','/').'</li>';
} else {
echo '<li class="'.$item['Page']['slug'].'">'.$this->Html->link($item['Page']['title'].'','/pages/view/'.$item['Page']['slug'].'').'</li>';
}
endforeach;
?>
相应的功能如下所示:
function getDynamicTopMenu(){
return $this->Page->find('all', array(
'conditions' => array('Page.published =' => '1','Page.top_menu' => '1'),
'fields' => array('Page.title','Page.slug','Page.top_menu'),
'order' => array('Page.id')
));
}
答案 0 :(得分:1)
事实证明,这是由于使用Auth组件而未将getDynamicTopMenu()
操作添加到app_controller.php中的allow数组引起的。
将getDynamicTopMenu添加到$this->Auth->allow()
后,问题就会消失: - )
答案 1 :(得分:1)
我有这个问题;在我的情况下,原因是格式错误的重定向路径。 下面,$ defaultController是我的控制器的名称加上/某些东西,所以重定向失败并且错误提到了更早。将$ defaultController变量清除为不超过有效的控制器并且一切正常。
$this->redirect($this->Auth->redirect('/' . "$defaultController" . '/', array('action' => 'index')));
答案 2 :(得分:0)
页面反复将浏览器重定向回同一页面,或者重定向到另一个重定向回原始页面的页面,依此类推。这不是一个错误会出现在Apache的错误日志中 - Apache只是执行请求,它不知道该网站不应该这样做。
检查您可能拥有的任何重定向,并确保您没有使用requestAction请求包含其自身的页面(这将使其再次请求自己,等等)。缓存页面可能只是让网站没有执行绕过bug的requestActions。