Цикл перенаправления CakePHP, если кэш представления очищен - PullRequest
2 голосов
/ 21 ноября 2010

У меня не особо сложная настройка 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 ]

1 голос
/ 22 ноября 2010

Оказывается, это было вызвано использованием компонента Auth, но не добавлением действия getDynamicTopMenu() в массив разрешений в app_controller.php.

Как только getDynamicTopMenu был добавлен в $this->Auth->allow(), проблема исчезла: -)

1 голос
/ 14 декабря 2012

У меня есть эта проблема; в моем случае причиной был неправильный путь перенаправления. Ниже $ defaultController - это имя моего контроллера плюс / что-то, поэтому перенаправление завершилось неудачно, и ошибка упоминалась выше. Очистил переменную $ defaultController до не более чем допустимого контроллера и все хорошо.

$this->redirect($this->Auth->redirect('/' . "$defaultController" . '/', array('action' => 'index')));
0 голосов
/ 21 ноября 2010

Страница перенаправляет браузер обратно на одну и ту же страницу снова и снова или перенаправляет на другую страницу, которая перенаправляет обратно на оригинал и т. Д.Это не ошибка, которая будет отображаться в журналах ошибок Apache - Apache просто выполняет запросы, он не знает, что сайт не должен это делать.

Проверьте, есть ли у вас какие-либо перенаправленияа также убедитесь, что вы не используете requestAction для запроса страницы, которая содержит себя (что заставило бы его запросить себя снова и т. д.).Кэшированная страница, вероятно, просто заставляет сайт не выполнять requestActions, которая обходит ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...