2010-11-21 10 views
2

特に複雑でないCakePHP(1.3)設定があります。私は明らかにビューのキャッシュに関連する非常に混乱している動作を発見しました。ビューキャッシュがクリアされた場合、CakePHPリダイレクトループ

私はrequestActionを使用して動的ナビゲーションを取得する2つのビューファイルをキャッシュしています。私は、ファイルシステムからこれらのキャッシュファイルの一方または両方を削除した場合、ブラウザはしばらくハングし、エラー・ページ吐く:


ページが正しく

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') 
    )); 
} 

答えて

1

これはAuthコンポーネントを使用し、getDynamicTopMenu()アクションをapp_controller.phpのallow配列に追加しないことによって発生したことが判明しました。

getDynamicTopMenuが$this->Auth->allow()に追加された後は、問題は、私はこの問題を持っている

0

または元のページにリダイレクトされる別のページにリダイレクトされます。これは、Apacheのエラーログに表示されるエラーではありません。Apacheはリクエストを実行するだけで、サイトがそれを行うとは思われません。

リダイレクトを確認し、requestActionを使用して自分自身を含むページをリクエストしていないことを確認してください(リクエスト自体を再度リクエストするなど)。おそらく、キャッシュされたページはバグを回避するrequestActionsをサイトが実行しないようにします。

+0

明らかに疑わしいことはないようです。私はいくつかのコードで私のポストを更新しました、おそらく私はしなかった何か新しい目のペアが表示されます。 – hollsk

1

:-)溶け。私の場合、その理由は不正なリダイレクトパスでした。 以下、$ defaultControllerは私のコントローラプラス/何かの名前だったので、リダイレクトは失敗し、エラーがより詳細に述べられました。 $ defaultController変数を有効なコントローラとすべての良いもの以上にクリーンアップしました。

$this->redirect($this->Auth->redirect('/' . "$defaultController" . '/', array('action' => 'index'))); 
関連する問題