web-dev-qa-db-ja.com

フォームからのリダイレクト応答をキャッシュしないようにするにはどうすればよいですか?

私はDrupal 8のフォームを認証済みユーザーが使用していて、セッションに何かが存在しないかどうかに基づいてリダイレクトする必要がある場合があります。リダイレクトをキャッシュしたくありません。

私のフォームはルートとともに直接表示されます。つまり、ルートにはフォームクラスを指す_formデフォルトがあります。

私のbuildFormメソッドは次のように始まります。

public function buildForm(array $form, FormStateInterface $form_state) 
{
    $form['#cache'] = ['max-age' => 0];

    if (some value not in session) {
        $response = new TrustedRedirectResponse($some_url);
        $response->setMaxAge(0);
        throw new EnforcedResponseException($response);  
    }

    // build the form.
}

リダイレクト応答がキャッシュされるのを回避できませんでした。セッション変数が存在しない場合は期待どおりにリダイレクトされますが、セッション変数が存在する場合は次回リダイレクトが続行されます。

ユーザーが認証されるため、動的ページキャッシュになります。 drush crまたは動的ページキャッシュをアンインストールすると、問題が「修正」されます。

3
tetranz

TrustedRedirectResponseに関連していることがわかりました。

標準のSymfony\Component\HttpFoundation\RedirectResponseはキャッシュされません。

1
tetranz