You are here

public function FormCache::getCache in Drupal 9

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Form/FormCache.php \Drupal\Core\Form\FormCache::getCache()
  2. 10 core/lib/Drupal/Core/Form/FormCache.php \Drupal\Core\Form\FormCache::getCache()

Fetches a form from the cache.

Parameters

string $form_build_id: The unique form build ID.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Overrides FormCacheInterface::getCache

File

core/lib/Drupal/Core/Form/FormCache.php, line 120

Class

FormCache
Encapsulates the caching of a form and its form state.

Namespace

Drupal\Core\Form

Code

public function getCache($form_build_id, FormStateInterface $form_state) {
  if ($form = $this->keyValueExpirableFactory
    ->get('form')
    ->get($form_build_id)) {
    if (isset($form['#cache_token']) && $this->csrfToken
      ->validate($form['#cache_token']) || !isset($form['#cache_token']) && $this->currentUser
      ->isAnonymous()) {
      $this
        ->loadCachedFormState($form_build_id, $form_state);

      // Generate a new #build_id if the cached form was rendered on a
      // cacheable page.
      $build_info = $form_state
        ->getBuildInfo();
      if (!empty($build_info['immutable'])) {
        $form['#build_id_old'] = $form['#build_id'];
        $form['#build_id'] = 'form-' . Crypt::randomBytesBase64();
        $form['form_build_id']['#value'] = $form['#build_id'];
        $form['form_build_id']['#id'] = $form['#build_id'];
        unset($build_info['immutable']);
        $form_state
          ->setBuildInfo($build_info);
      }
      return $form;
    }
  }
}