function FormCache::getCache

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

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;
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.