如果清除视图缓存,则CakePHP重定向循环

时间:2010-11-21 20:14:18

标签: php caching cakephp

我有一个特别复杂的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')
    ));
}

3 个答案:

答案 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。