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
f6df60e1b8
commit
4a629e32df
|
|
@ -8,6 +8,7 @@ use Drupal\Core\Extension\ModuleHandlerInterface;
|
|||
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 @@ class FormCache implements FormCacheInterface {
|
|||
* {@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 @@ namespace Drupal\KernelTests\Core\Form;
|
|||
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 @@ class FormCacheTest extends KernelTestBase {
|
|||
$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['update_free_access'] = FALSE;
|
|||
*/
|
||||
# $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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue