diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php index 001e27813a8..a795e0ee5f3 100644 --- a/core/lib/Drupal/Core/Extension/ModuleHandler.php +++ b/core/lib/Drupal/Core/Extension/ModuleHandler.php @@ -759,6 +759,9 @@ class ModuleHandler implements ModuleHandlerInterface { watchdog('system', '%module module uninstalled.', array('%module' => $module), WATCHDOG_INFO); $schema_store->delete($module); + + // Make sure any route data is also removed for this module. + \Drupal::service('router.dumper')->dump(array('provider' => $module)); } drupal_get_installed_schema_version(NULL, TRUE); diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/RouterTest.php b/core/modules/system/lib/Drupal/system/Tests/Routing/RouterTest.php index 97d55b14d43..f4dadae1901 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Routing/RouterTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Routing/RouterTest.php @@ -192,4 +192,13 @@ class RouterTest extends WebTestBase { $this->assertRaw('abcde', 'Correct body was found.'); } + + /** + * Tests that routes no longer exist for a module that has been uninstalled. + */ + public function testRouterUninstall() { + \Drupal::moduleHandler()->uninstall(array('router_test')); + $route_count = \Drupal::database()->query('SELECT COUNT(*) FROM {router} WHERE provider = :provider', array(':provider' => 'router_test'))->fetchField(); + $this->assertEqual(0, $route_count, 'All router_test routes have been removed on uninstall.'); + } }