5

Cache-Control:デフォルトでは、Catalystはヘッダーなどを出力しないようです。私はこれらを次のような特定のコントローラーメソッドで出力できることを知っています。

$c->response->headers->last_modified(time);
$c->response->headers->expires(time + $self->{cache_time});
$c->response->headers->header(cache_control => "public, max-age=$self->{cache_time}");

ただし、それぞれの方法でそれを行うのはかなり苦痛になります!私が好むのは:

  • デフォルトのヘッダーセット(現在有効期限が切れ、最終変更は現在、cache-control:no-cache、pragma:no-cache)
  • メソッドごとに、デフォルトをオーバーライドする方法。

これを達成するための良い方法はありますか?

4

2 に答える 2

6

デロベルト:

素晴らしい質問です。これについては、Catalyst アドベント カレンダー の記事で正確に説明しました。

基本的に、特定のアクションのキャッシュ時間を定義するスタッシュ変数を作成し、それをルート エンド ルーチンで処理します。すべての詳細については、記事を参照してください。

ジェイ・ケイ

于 2009-07-24T17:11:03.787 に答える
3

更新:私の以前の提案に対するあなたの反応に基づいて、私は弾丸を噛んで Catalyst ドキュメントを見ることにしました。私には思えますが、これを行う場所は次のとおりです。

  sub end : Private {
    my ( $self, $c ) = @_;

    # handle errors etc.

    if ( $c->res->body ) {
        if ( "some condition" ) {
            set_default_response_headers( $c->response->headers );
            return;
        }
        else {
            do_something_else();
            return;
        }
    }
    $c->forward( 'MyApp::View::TT' ); # render template
}

以前の回答:私は Catalyst を使用していませんが、アプリケーションのサブを作成することはできませんか?

sub set_default_response_headers {
    my ($h) = @_;
    $h->last_modified(time);
    $h->expires(time + $self->{cache_time});
    $h->header(cache_control => "public, max-age=$self->{cache_time}");
    return $h;    
}

で呼び出しset_default_response_headers( $c->response->headers )ます。

于 2009-07-24T13:24:32.757 に答える