"Class not found" error on `\Civi\*` because hook_civicrm_config runs after hook_civicrm_container
`hook_civicrm_config` is responsible for telling the autoloader which classes exist in extensions, so must run before any other hooks. However: * `hook_civicrm_fieldOptions` is called before `hook_civicrm_config`; this is issue #1132, and there's a [PR](https://github.com/civicrm/civicrm-core/pull/19580). * `hook_civicrm_container` runs before `hook_civicrm_config`; this ticket discusses that. Here are some examples (with backtraces): * Issue #2334 appears to be this issue. There's also the backtrace below, which happens when my Drupal cron runs. This only happens on classes in the `\Civi` namespace, which isn't as common in extensions, which is why this isn't more widespread. I don't know enough about `hook_civicrm_config` and `hook_civicrm_container`, but it seems we should guarantee that `hook_civicrm_config` always runs first. ``` Mar 02 15:54:01 [debug] $pdfapi-backtrace = #0 /var/www/mysite.org/web/sites/all/civicrm-custom/extensions/org.civicoop.pdfapi/pdfapi.php(14): CRM_Core_Error::backtrace("pdfapi-backtrace", TRUE) #1 /var/www/mysite.org/web/sites/all/modules/civicrm/CRM/Utils/Hook.php(271): pdfapi_civicrm_container(Object(Symfony\Component\DependencyInjection\ContainerBuilder)) #2 /var/www/mysite.org/web/sites/all/modules/civicrm/CRM/Utils/Hook/DrupalBase.php(73): CRM_Utils_Hook->runHooks((Array:99), "civicrm_container", 1, Object(Symfony\Component\DependencyInjection\ContainerBuilder), NULL, NULL, NULL, NULL, NULL) #3 /var/www/mysite.org/web/sites/all/modules/civicrm/Civi/Core/CiviEventDispatcher.php(168): CRM_Utils_Hook_DrupalBase->invokeViaUF(1, Object(Symfony\Component\DependencyInjection\ContainerBuilder), NULL, NULL, NULL, NULL, NULL, "civicrm_container") #4 /var/www/mysite.org/web/sites/all/modules/civicrm/vendor/symfony/event-dispatcher/EventDispatcher.php(214): Civi\Core\CiviEventDispatcher::delegateToUF(Object(Civi\Core\Event\GenericHookEvent), "hook_civicrm_container", Object(Civi\Core\CiviEventDispatcher)) #5 /var/www/mysite.org/web/sites/all/modules/civicrm/vendor/symfony/event-dispatcher/EventDispatcher.php(44): Symfony\Component\EventDispatcher\EventDispatcher->doDispatch((Array:1), "hook_civicrm_container", Object(Civi\Core\Event\GenericHookEvent)) #6 /var/www/mysite.org/web/sites/all/modules/civicrm/Civi/Core/CiviEventDispatcher.php(129): Symfony\Component\EventDispatcher\EventDispatcher->dispatch("hook_civicrm_container", Object(Civi\Core\Event\GenericHookEvent)) #7 /var/www/mysite.org/web/sites/all/modules/civicrm/CRM/Utils/Hook.php(167): Civi\Core\CiviEventDispatcher->dispatch("hook_civicrm_container", Object(Civi\Core\Event\GenericHookEvent)) #8 /var/www/mysite.org/web/sites/all/modules/civicrm/CRM/Utils/Hook.php(2523): CRM_Utils_Hook->invoke((Array:1), Object(Symfony\Component\DependencyInjection\ContainerBuilder), NULL, NULL, NULL, NULL, NULL, "civicrm_container") #9 /var/www/mysite.org/web/sites/all/modules/civicrm/Civi/Core/Container.php(334): CRM_Utils_Hook::container(Object(Symfony\Component\DependencyInjection\ContainerBuilder)) #10 /var/www/mysite.org/web/sites/all/modules/civicrm/Civi/Core/Container.php(69): Civi\Core\Container->createContainer() #11 /var/www/mysite.org/web/sites/all/modules/civicrm/Civi/Core/Container.php(564): Civi\Core\Container->loadContainer() #12 /var/www/mysite.org/web/sites/all/modules/civicrm/CRM/Core/Config.php(93): Civi\Core\Container::boot(TRUE) #13 /var/www/mysite.org/web/sites/all/modules/civicrm/drupal/civicrm.module(227): CRM_Core_Config::singleton() #14 /var/www/mysite.org/web/sites/all/modules/civicrm/drupal/modules/civicrmtheme/civicrmtheme.module(98): civicrm_initialize() #15 /var/www/mysite.org/web/includes/module.inc(965): civicrmtheme_custom_theme() #16 /var/www/mysite.org/web/includes/menu.inc(1760): module_invoke_all("custom_theme") #17 /var/www/mysite.org/web/includes/menu.inc(1782): menu_get_custom_theme(TRUE) #18 /var/www/mysite.org/web/includes/common.inc(5376): menu_set_custom_theme() #19 /var/www/mysite.org/web/includes/bootstrap.inc(2552): _drupal_bootstrap_full() #20 /usr/local/src/drush7/lib/Drush/Boot/DrupalBoot7.php(74): drupal_bootstrap(7) #21 /usr/local/src/drush7/includes/bootstrap.inc(313): Drush\Boot\DrupalBoot7->bootstrap_drupal_full() #22 /usr/local/src/drush7/includes/bootstrap.inc(429): drush_bootstrap(5, 6) #23 /usr/local/src/drush7/lib/Drush/Boot/BaseBoot.php(56): drush_bootstrap_to_phase(6) #24 /usr/local/src/drush7/drush.php(70): Drush\Boot\BaseBoot->bootstrap_and_dispatch() #25 /usr/local/src/drush7/drush.php(11): drush_main() #26 {main} ```
issue