При попутке удалить модуль через drush (drush pm:uninstall моймодуль) вылезает ошибка:
PHP Fatal error: Uncaught Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException: Circular reference detected for service "entity_type.manager", path: "user_last_access_subscriber -> entity_type.manager -> string_translation -> string_translator.locale.lookup -> config.factory -> set_front_page.overrider -> set_front_page.manager". in /home/users/.../.........../domains/mysite.ru/web/core/lib/Drupal/Component/DependencyInjection/Container.php:147
содержимое этой 147 строки:
if (isset($this->loading[$id])) { throw new ServiceCircularReferenceException($id, array_keys($this->loading)); }
В чем может быть проблема? Как лечить?
Комментарии
такая ошибка уже была https://www.drupal.org/project/config_pages_overrides/issues/3168825
наверно ее генерит модуль config_pages_overrides
Этот модуль у меня не был установлен. Установил и настроил, как было указано в посте. Проблема не решилась
Ключ к решению скорее всего лежит в файле моймодуль.install.
Точно нет, потому как при попытке удаления любого модуля возникает такая ошибка.
Если это при удалении вашего модуля, то смотрите конструкторы и методы create в ваших сервисах и классах, где используется Dependency Injection: плагинах, формах, контроллерах. Самая частая причина такого поведения - это вызов метода getStorage сервиса entityTypeManager в конструкторах или create. Способ решения - никогда не использовать entityStorage как свойство класса. Нужно в свойство класса назначать entityTypeManager, а storage получать по месту.
Кроме того, причиной может быть инициализация экземпляра плагина в конструкторе.
Спасибо большое, за помощь.
Но я, в общем, никуда особо и не лазил в php. Все настраивал из админки. Разве что пару твигов поправил, по дизайну.
Ясно, значит эта проблема где-то в контрибных модулях. К слову, в том модуле, о котором говорил Йура, проблема также была в getStorage в конструкторе.
Если вы плохо разбираетесь в php, то тут есть несколько вариантов. Первый, проверить, отключился ли всё-таки модуль. Часто бывает такое, что несмотря на ошибку модуль всё же выключается и после сброса кэша всё работает.
Если не помогло, то надо искать в файлах контрибных модулей вызов метода getStorage и смотреть, где он вызывается внутри методов __construct или create. Можно попробовать закомментировать строку и снова попробовать удалить модуль, а потом вернуть всё, как было.
Огромное спасибо за помощь! Буду искать.
Удалил несколько неиспользуемых модулей с помощью Composer + почистил drush config:delete core.extension module.моймодуль.
И всё заработало.
Благодарю еще раз вас - jura12 и gun_dose.