0

ちょっと困惑する状況に出くわしました。私のコントローラーアクションは次のようになります。

public function myaction($eventId = false) {
    if(!$eventId) {
        //list all events
        $data = foo;
    } else {
        if(!$this->Event->findById($eventId) )
        {
            $this->Session->setFlash('myerror message', 'flash_frontend_message');
            $this->redirect(array('controller' => 'events', 'action' => 'myaction'));
        } else {
            // display event information
            $data = foo;
        }
    }
    $this->set($data);
}

データベースに見つからない$eventIdを使用して関数を呼び出すと、エラーメッセージが出力され、ユーザーはすべてのイベントのリストにリダイレクトされます。ただし、有効なeventIdを選択し、関連情報を表示してからブラウザの戻るボタンを押すと、この場合のURLに$ eventIdが含まれていなくても、前のフラッシュメッセージが再び出力されます。

何が起こるかというと、ページはリロードされるのではなく、ブラウザのキャッシュからロードされると思います。私はこのようにビューをキャッシュに保存することを避けようとしました:

<!--nocache-->
<?php echo $this->Session->flash(); ?>
<?php echo $this->Session->flash('auth'); ?>
<!--/nocache-->

それでも、フラッシュメッセージが表示されます。

この動作を防ぐ方法はありますか?表示後にフラッシュをクリアする方法はありますか?

4

1 に答える 1

2

正しいキャッシュについて話していますが、間違ったキャッシュで修正しようとしています。

<!--nocache-->

ファイル自体に php/html no cache ステートメントがあります。ブラウザのキャッシュとは関係ありません。あなたがする必要があるのは、正しいヘッダーを設定することです。

この正確なもののリクエストオブジェクトには便利なメソッドがあります: http://book.cakephp.org/2.0/en/controllers/request-response.html#interacting-with-browser-caching

AppController を介して、すべての通常のフロントエンド アクションで使用します。

public function beforeRender() {
    $this->response->disableCache();
    ...
}
于 2012-04-12T00:38:23.123 に答える