Commit 4a629e32 authored by cilefen's avatar cilefen

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
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
use Drupal\Core\KeyValueStore\KeyValueExpirableFactoryInterface; use Drupal\Core\KeyValueStore\KeyValueExpirableFactoryInterface;
use Drupal\Core\PageCache\RequestPolicyInterface; use Drupal\Core\PageCache\RequestPolicyInterface;
use Drupal\Core\Session\AccountInterface; use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Site\Settings;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\RequestStack;
...@@ -170,8 +171,8 @@ protected function loadCachedFormState($form_build_id, FormStateInterface $form_ ...@@ -170,8 +171,8 @@ protected function loadCachedFormState($form_build_id, FormStateInterface $form_
* {@inheritdoc} * {@inheritdoc}
*/ */
public function setCache($form_build_id, $form, FormStateInterface $form_state) { public function setCache($form_build_id, $form, FormStateInterface $form_state) {
// 6 hours cache life time for forms should be plenty. // Cache forms for 6 hours by default.
$expire = 21600; $expire = Settings::get('form_cache_expiration', 21600);
// Ensure that the form build_id embedded in the form structure is the same // 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 // as the one passed in as a parameter. This is an additional safety measure
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
use Drupal\Core\Form\FormState; use Drupal\Core\Form\FormState;
use Drupal\Core\Session\AnonymousUserSession; use Drupal\Core\Session\AnonymousUserSession;
use Drupal\Core\Session\UserSession; use Drupal\Core\Session\UserSession;
use Drupal\Core\Site\Settings;
use Drupal\KernelTests\KernelTestBase; use Drupal\KernelTests\KernelTestBase;
/** /**
...@@ -101,4 +102,16 @@ public function testNoCacheToken() { ...@@ -101,4 +102,16 @@ public function testNoCacheToken() {
$account_switcher->switchBack(); $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 @@ ...@@ -440,6 +440,15 @@
*/ */
# $settings['cache_ttl_4xx'] = 3600; # $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. * Class Loader.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment