web-dev-qa-db-fra.com

Drupal 8, vider le cache spécifique

Dans Drupal 8 nous avons la commande drush cr qui est la nouvelle version du déprécié drush cc all . Cependant, nous avions le menu drush cc et quelques commandes plus spécifiques de suppression du cache. Si j'essaye de les exécuter, j'obtiens une erreur symfony étrange.

Ce que je veux réaliser: Trouvez les commandes de remplacement pour drush cc (cache spécifique) dans Drupal 8.

Ce que j'ai déjà vérifié/essayé: La documentation est un peu rare: https://drushcommands.com/drush-8x/cache/cache-clear /

Taper manuellement tous les types de commandes comme le menu drush cr, etc. Elles ne semblent pas fonctionner.

Cordialement, Oleg

7
Oleg Videnov

drush n'est pas prêt pour le moment (pour autant que je sache), vous devrez donc écrire des scripts drush personnalisés ou effectuer une autre exécution. drush cr reconstruit l'ensemble du cache, drush cc ne fonctionne pas avec drupal8.

la méthode drupal_flush_all_caches montre comment vider tous les caches principaux.

$module_handler = \Drupal::moduleHandler();
  // Flush all persistent caches.
  // This is executed based on old/previously known information, which is
  // sufficient, since new extensions cannot have any primed caches yet.
  $module_handler->invokeAll('cache_flush');
  foreach (Cache::getBins() as $service_id => $cache_backend) {
    $cache_backend->deleteAll();
  }

  // Flush asset file caches.
  \Drupal::service('asset.css.collection_optimizer')->deleteAll();
  \Drupal::service('asset.js.collection_optimizer')->deleteAll();
  _drupal_flush_css_js();

  // Reset all static caches.
  drupal_static_reset();

  // Invalidate the container.
  \Drupal::service('kernel')->invalidateContainer();

  // Wipe the Twig PHP Storage cache.
  PhpStorageFactory::get('twig')->deleteAll();

  // Rebuild module and theme data.
  $module_data = system_rebuild_module_data();
  /** @var \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler */
  $theme_handler = \Drupal::service('theme_handler');
  $theme_handler->refreshInfo();
  // In case the active theme gets requested later in the same request we need
  // to reset the theme manager.
  \Drupal::theme()->resetActiveTheme();


  // Rebuild and reboot a new kernel. A simple DrupalKernel reboot is not
  // sufficient, since the list of enabled modules might have been adjusted
  // above due to changed code.
  $files = array();
  foreach ($module_data as $name => $extension) {
    if ($extension->status) {
      $files[$name] = $extension;
    }
  }
  \Drupal::service('kernel')->updateModules($module_handler->getModuleList(), $files);
  // New container, new module handler.
  $module_handler = \Drupal::moduleHandler();

  // Ensure that all modules that are currently supposed to be enabled are
  // actually loaded.
  $module_handler->loadAll();

  // Rebuild all information based on new module data.
  $module_handler->invokeAll('rebuild');

  // Clear all plugin caches.
  \Drupal::service('plugin.cache_clearer')->clearCachedDefinitions();

  // Rebuild the menu router based on all rebuilt data.
  // Important: This rebuild must happen last, so the menu router is guaranteed
  // to be based on up to date information.
  \Drupal::service('router.builder')->rebuild();

  // Re-initialize the maintenance theme, if the current request attempted to
  // use it. Unlike regular usages of this function, the installer and update
  // scripts need to flush all caches during GET requests/page building.
  if (function_exists('_drupal_maintenance_theme')) {
    \Drupal::theme()->resetActiveTheme();
    drupal_maintenance_theme();
  }
7
rémy

Vous pouvez utiliser DrupalConsole cache:rebuild commande et utilisez le mode interactif pour sélectionner dans la liste le cache à effacer.

drupal cache:rebuild

Vous pouvez également utiliser l'alias de commande cr

drupal cr

Si vous connaissez le cache que vous essayez d'effacer, essayez de le passer comme argument

drupal cr menu
4
jmolivas

Drush cc fonctionne toujours (ou encore?) Comme il le faisait dans la v7, par exemple: drush cc css-js ou drush cc render voir le lien que vous avez déjà donné: https://drushcommands.com/drush-8x/cache/cache-clear/

si vous faites simplement drush cc vous obtiendrez une liste d'options. ('menu' n'en fait pas partie)

$ drush cc
Enter a number to choose which cache to clear.
 [0]  :  Cancel         
 [1]  :  drush          
 [2]  :  theme-registry 
 [3]  :  router         
 [4]  :  css-js         
 [5]  :  module-list    
 [6]  :  theme-list     
 [7]  :  render         
 [8]  :  token          
 [9]  :  views
2
Roberto Dilari

Utilisez le module Vider le cache spécifique ( https://www.drupal.org/project/ccos ).

Le module Vider le cache spécifique vous aidera à vider le cache du type d'entité unique/spécifique (c.-à-d. Bloc, nœud, bloc de vues, page d'affichage, etc.) des liens contextuels, du menu des tâches locales et du bouton déroulant des opérations.

0
Ravi singh