Problem/Motivation
Since contrib modules are migrating from hooks to events there's a high risk to run into fatal errors when you install a module or if yopu install drupal from an existing config. The issue happens if a module uses constants defined in a class or interface to name their events. If the subscriber is implemented in a module which subscribes to a event defined in a module it depends on but which is not yet installed you get a fatal error instead of being asked if you wish to install the dependencies.
You also run in a fatal error if you install druapl "from existing config".
Steps to reproduce
With a fresh checkout of Drupal 9.1 (without search_api being installed):
composer require drupal/facets:dev-1.x#c250c2f53a33383de27384ba94479f03070d68e8
drush site:install
drush en facets
leads to
[error] Error: Class 'Drupal\search_api\Event\SearchApiEvents' not found in Drupal\facets\EventSubscriber\SearchApiSubscriber::getSubscribedEvents() (line 53 of /Users/markus.kalkbrenner/workspace/git/drupal/modules/contrib/facets/src/EventSubscriber/SearchApiSubscriber.php) #0 /Users/markus.kalkbrenner/workspace/git/drupal/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterEventSubscribersPass.php(37): Drupal\facets\EventSubscriber\SearchApiSubscriber::getSubscribedEvents()
#1 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/symfony/dependency-injection/Compiler/Compiler.php(94): Drupal\Core\DependencyInjection\Compiler\RegisterEventSubscribersPass->process(Object(Drupal\Core\DependencyInjection\ContainerBuilder))
#2 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/symfony/dependency-injection/ContainerBuilder.php(762): Symfony\Component\DependencyInjection\Compiler\Compiler->compile(Object(Drupal\Core\DependencyInjection\ContainerBuilder))
#3 /Users/markus.kalkbrenner/workspace/git/drupal/core/lib/Drupal/Core/DrupalKernel.php(1293): Symfony\Component\DependencyInjection\ContainerBuilder->compile()
#4 /Users/markus.kalkbrenner/workspace/git/drupal/core/lib/Drupal/Core/DrupalKernel.php(898): Drupal\Core\DrupalKernel->compileContainer()
#5 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/drush/drush/src/Drupal/DrupalKernelTrait.php(69): Drupal\Core\DrupalKernel->initializeContainer()
#6 /Users/markus.kalkbrenner/workspace/git/drupal/core/lib/Drupal/Core/DrupalKernel.php(819): Drush\Drupal\DrupalKernel->initializeContainer()
#7 /Users/markus.kalkbrenner/workspace/git/drupal/core/lib/Drupal/Core/Extension/ModuleInstaller.php(583): Drupal\Core\DrupalKernel->updateModules(Array, Array)
#8 /Users/markus.kalkbrenner/workspace/git/drupal/core/lib/Drupal/Core/Extension/ModuleInstaller.php(207): Drupal\Core\Extension\ModuleInstaller->updateKernel(Array)
#9 /Users/markus.kalkbrenner/workspace/git/drupal/core/lib/Drupal/Core/ProxyClass/Extension/ModuleInstaller.php(83): Drupal\Core\Extension\ModuleInstaller->install(Array, true)
#10 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/drush/drush/src/Drupal/Commands/pm/PmCommands.php(90): Drupal\Core\ProxyClass\Extension\ModuleInstaller->install(Array, true)
#11 [internal function]: Drush\Drupal\Commands\pm\PmCommands->enable(Array, Array)
#12 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/consolidation/annotated-command/src/CommandProcessor.php(257): call_user_func_array(Array, Array)
#13 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/consolidation/annotated-command/src/CommandProcessor.php(212): Consolidation\AnnotatedCommand\CommandProcessor->runCommandCallback(Array, Object(Consolidation\AnnotatedCommand\CommandData))
#14 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/consolidation/annotated-command/src/CommandProcessor.php(176): Consolidation\AnnotatedCommand\CommandProcessor->validateRunAndAlter(Array, Array, Object(Consolidation\AnnotatedCommand\CommandData))
#15 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/consolidation/annotated-command/src/AnnotatedCommand.php(311): Consolidation\AnnotatedCommand\CommandProcessor->process(Object(Symfony\Component\Console\Output\ConsoleOutput), Array, Array, Object(Consolidation\AnnotatedCommand\CommandData))
#16 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/symfony/console/Command/Command.php(255): Consolidation\AnnotatedCommand\AnnotatedCommand->execute(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#17 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/symfony/console/Application.php(1027): Symfony\Component\Console\Command\Command->run(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/symfony/console/Application.php(273): Symfony\Component\Console\Application->doRunCommand(Object(Consolidation\AnnotatedCommand\AnnotatedCommand), Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#19 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#20 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/drush/drush/src/Runtime/Runtime.php(118): Symfony\Component\Console\Application->run(Object(Drush\Symfony\DrushArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#21 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/drush/drush/src/Runtime/Runtime.php(48): Drush\Runtime\Runtime->doRun(Array, Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/drush/drush/drush.php(72): Drush\Runtime\Runtime->run(Array)
#23 /Users/markus.kalkbrenner/workspace/git/drupal/vendor/drush/drush/drush(4): require('/Users/markus.k...')
#24 {main}. The same happens if you install without drush but using Drupal's UI:

Proposed resolution
Remaining tasks
User interface changes
API changes
Data model changes
Release notes snippet
| Comment | File | Size | Author |
|---|---|---|---|
| #2 | Bildschirmfoto 2021-02-24 um 09.54.05.png | 420.45 KB | mkalkbrenner |
Comments
Comment #2
mkalkbrennerComment #3
mkalkbrennerComment #4
mkalkbrennerComment #5
andypostThe bug should be fixed upstream first I bet
Comment #6
catchThis is a duplicate of #2825358: Event class constants for event names can cause fatal errors when a module is installed.