web-dev-qa-db-ja.com

フォームフィールドにデータベース値をロードするFORMでCACHEを無効にする方法

フォームにデータベースの値を読み込んでいます。フォームがキャッシュされ、データベースから古いデータを読み込んでいるようです。

私はここで指示に従いました( D8で匿名ユーザーのフォームがキャッシュされないようにするにはどうすればよいですか? )。

ここに私のコードがあり、私が行方不明の場所を誰かが明かすことができれば幸いです。

....

/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {

// Define form fields.
$form['#cache']['max-age'] = 0;

$form['name'] = array(
  '#type' => 'textfield',
  '#size' => 80,
  '#title' => t('Your Name'),
  '#default_value' => $result->name,
);

return $form;
}

....

「use Drupal\Core\Cache;」を追加する必要がありますか?このファイルの上に?

どうもありがとう。

1
webdevfreak

リンクされた質問で、モジュールInternal Page Cacheが有効になっていませんでした。すべてのページのページキャッシュを無効にしたくないが、このフォームページに対してのみ無効にする場合は、フォームを返す前に\Drupal::service('page_cache_kill_switch')->trigger()を追加します。

/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {

// Define form fields.
$form['#cache']['max-age'] = 0;

$form['name'] = array(
  '#type' => 'textfield',
  '#size' => 80,
  '#title' => t('Your Name'),
  '#default_value' => $result->name,
);

\Drupal::service('page_cache_kill_switch')->trigger();

return $form;
}
2
4k4