Skip to content
Snippets Groups Projects
Commit 4a629e32 authored by cilefen's avatar cilefen
Browse files

Issue #1286154 by mcdruid, cosmicdreams, das-peter, Cameron Tod, heddn, xjm,...

Issue #1286154 by mcdruid, cosmicdreams, das-peter, Cameron Tod, heddn, xjm, catch, tstoeckler, David_Rothstein, anavarre, tim.plunkett, naveenvalecha, dawehner: Allow custom default form cache expiration/lifetime
parent f6df60e1
No related branches found
No related tags found
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
......@@ -8,6 +8,7 @@
use Drupal\Core\KeyValueStore\KeyValueExpirableFactoryInterface;
use Drupal\Core\PageCache\RequestPolicyInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Site\Settings;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
......@@ -170,8 +171,8 @@ protected function loadCachedFormState($form_build_id, FormStateInterface $form_
* {@inheritdoc}
*/
public function setCache($form_build_id, $form, FormStateInterface $form_state) {
// 6 hours cache life time for forms should be plenty.
$expire = 21600;
// Cache forms for 6 hours by default.
$expire = Settings::get('form_cache_expiration', 21600);
// Ensure that the form build_id embedded in the form structure is the same
// as the one passed in as a parameter. This is an additional safety measure
......
......@@ -5,6 +5,7 @@
use Drupal\Core\Form\FormState;
use Drupal\Core\Session\AnonymousUserSession;
use Drupal\Core\Session\UserSession;
use Drupal\Core\Site\Settings;
use Drupal\KernelTests\KernelTestBase;
/**
......@@ -101,4 +102,16 @@ public function testNoCacheToken() {
$account_switcher->switchBack();
}
/**
* Tests the form cache with an overridden cache expiration.
*/
public function testCacheCustomExpiration() {
// Override form cache expiration so that the cached form expired yesterday.
new Settings(['form_cache_expiration' => -1 * (24 * 60 * 60), 'hash_salt' => $this->randomMachineName()]);
\Drupal::formBuilder()->setCache($this->formBuildId, $this->form, $this->formState);
$cached_form_state = new FormState();
$this->assertFalse(\Drupal::formBuilder()->getCache($this->formBuildId, $cached_form_state), 'Expired form not returned from cache');
}
}
......@@ -440,6 +440,15 @@
*/
# $settings['cache_ttl_4xx'] = 3600;
/**
* Expiration of cached forms.
*
* Drupal's Form API stores details of forms in a cache and these entries are
* kept for at least 6 hours by default. Expired entries are cleared by cron.
*
* @see \Drupal\Core\Form\FormCache::setCache()
*/
# $settings['form_cache_expiration'] = 21600;
/**
* Class Loader.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment