Règle du pouce: Cron doit être exécuté régulièrement pour la maintenance de votre site Web.
Vous avez mentionné dans votre commentaire à MPD que malgré la configuration du cron et leur exécution régulière, votre table cache_form grandit rapidement.
Une solution à cela consiste à exécuter votre cron plus fréquemment. Dites toutes les six heures ou moins? Si vous ne pouvez pas le faire, lisez la suite.
Solution alternative:
mymodule_cron() {
cache_clear_all(NULL, 'cache_form');
}
Installez Elysia Cron et vous pouvez maintenant exécuter la fonction cron de votre module séparément. Vous pouvez conserver la fréquence du cron Elysia pour que votre module fonctionne toutes les six heures. Pour que votre cache_form
table soit élaguée toutes les six heures.
Pendant ce processus d'élagage, les entrées qui ne datent pas de plus de 6 heures ne seront pas supprimées. La raison étant que si toutes les entrées sont supprimées, tous les formulaires qui sont soumis au moment de la suppression des entrées peuvent se comporter bizarrement.
Regardez le code dans https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_cache/7
function form_set_cache($form_build_id, $form, $form_state) {
// 6 hours cache life time for forms should be plenty.
$expire = 21600;
Au fur et à mesure que le commentaire se lit, ils supposent que cela devrait être suffisant et dans votre cas, cela devient trop pour vous. Donc, l'astuce consiste à effacer la table cache_form plus fréquemment et à réduire la valeur de $ expire à une valeur inférieure, si vous souhaitez effacer les entrées cache_form plus fréquemment que la valeur par défaut de 6 six heures, vous devez modifier le TTL de les entrées cache_form.
Vous pouvez le faire en installant cacheboject puis en implémentant le hook_cacheobject_presave
délai dans lequel vous pouvez modifier le TTL pour qu'il soit de 2 ou 3 heures.
mymodule_cacheobject_presave()($object, $cid, $bin) {
// Extend the expiry period for prototype forms used in ajax enabled forms.
$cache_ttl = 1 ; // Change it to any number of hours
if ($bin == 'cache_form') {
$object->expire = REQUEST_TIME + $cache_ttl * 3600;
}
}
Un inconvénient de cette approche est que si les formulaires ne sont pas soumis dans les 2 heures (la valeur RTL que vous définissez), les données du formulaire peuvent être perdues et vous pouvez obtenir des problèmes de formulaire expiré.