diff core/includes/utility.inc @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/includes/utility.inc	Thu Jul 05 14:24:15 2018 +0000
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * @file
+ * Miscellaneous functions.
+ */
+
+use Drupal\Core\PhpStorage\PhpStorageFactory;
+use Drupal\Core\Cache\Cache;
+use Drupal\Core\DrupalKernel;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * Rebuilds all caches even when Drupal itself does not work.
+ *
+ * @param $class_loader
+ *   The class loader. Normally Composer's ClassLoader, as included by the
+ *   front controller, but may also be decorated; e.g.,
+ *   \Symfony\Component\ClassLoader\ApcClassLoader, \Symfony\Component\ClassLoader\WinCacheClassLoader, or \Symfony\Component\ClassLoader\XcacheClassLoader
+ * @param \Symfony\Component\HttpFoundation\Request $request
+ *   The current request.
+ *
+ * @see rebuild.php
+ */
+function drupal_rebuild($class_loader, Request $request) {
+  // Remove Drupal's error and exception handlers; they rely on a working
+  // service container and other subsystems and will only cause a fatal error
+  // that hides the actual error.
+  restore_error_handler();
+  restore_exception_handler();
+
+  // Force kernel to rebuild php cache.
+  PhpStorageFactory::get('twig')->deleteAll();
+
+  // Bootstrap up to where caches exist and clear them.
+  $kernel = new DrupalKernel('prod', $class_loader);
+  $kernel->setSitePath(DrupalKernel::findSitePath($request));
+
+  // Invalidate the container.
+  $kernel->invalidateContainer();
+
+  // Prepare a NULL request.
+  $kernel->prepareLegacyRequest($request);
+
+  foreach (Cache::getBins() as $bin) {
+    $bin->deleteAll();
+  }
+
+  // Disable recording of cached pages.
+  \Drupal::service('page_cache_kill_switch')->trigger();
+
+  drupal_flush_all_caches();
+
+  // Restore Drupal's error and exception handlers.
+  // @see \Drupal\Core\DrupalKernel::boot()
+  set_error_handler('_drupal_error_handler');
+  set_exception_handler('_drupal_exception_handler');
+}