После обновления до Drupal 9 у меня возникла проблема с интеграцией LDAP. Раньше, когда я работал на Drupal 8, я успешно интегрировал школьный LDAP для аутентификации пользователей, используя соответствующий модуль вклада. Однако после обновления до Drupal 9 интеграция с LDAP перестала работать, и всякий раз, когда пользователь пытается войти в систему, он получает сообщение об ошибке «На веб-сайте произошла непредвиденная ошибка. Повторите попытку позже».
Теперь, проверяя логи, я всегда вижу эту ошибку:
Ошибка: класс Symfony\Component\OptionsResolver\OptionsResolver не найден в Symfony\Component\Ldap\Adapter\AbstractConnection->__construct() (строка 26 файла /var/www/www-dev/modules/ludwig/lib/grahl- ldap/source/Adapter/AbstractConnection.php)
#0 /var/www/www-dev/modules/ludwig/lib/grahl-ldap/source/Adapter/ExtLdap/Adapter.php(41): Symfony\Component\Ldap\Adapter\AbstractConnection->__construct()
#1 /var/www/www-dev/modules/ludwig/lib/grahl-ldap/source/Ldap.php(40): Symfony\Component\Ldap\Adapter\ExtLdap\Adapter->getConnection()
#2 /var/www/www-dev/modules/ldap/ldap_servers/src/LdapBridge.php(143): Symfony\Component\Ldap\Ldap->bind()
#3 /var/www/www-dev/modules/ldap/ldap_servers/src/ServerListBuilder.php(92): Drupal\ldap_servers\LdapBridge->bind()
#4 /var/www/www-dev/modules/ldap/ldap_servers/src/ServerListBuilder.php(58): Drupal\ldap_servers\ServerListBuilder->checkStatus()
#5 /var/www/www-dev/core/lib/Drupal/Core/Entity/EntityListBuilder.php(219): Drupal\ldap_servers\ServerListBuilder->buildRow()
#6 /var/www/www-dev/core/lib/Drupal/Core/Entity/Controller/EntityListController.php(23): Drupal\Core\Entity\EntityListBuilder->render()
#7 [внутренняя функция]: Drupal\Core\Entity\Controller\EntityListController->listing()
#8 /var/www/www-dev/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array()
#9 /var/www/www-dev/core/lib/Drupal/Core/Render/Renderer.php(578): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{close}()
#10 /var/www/www-dev/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext()
#11 /var/www/www-dev/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext()
#12 /var/www/www-dev/vendor/symfony/http-kernel/HttpKernel.php(158): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{close}()
#13 /var/www/www-dev/vendor/symfony/http-kernel/HttpKernel.php(80): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
#14 /var/www/www-dev/core/lib/Drupal/Core/StackMiddleware/Session.php(57): Symfony\Component\HttpKernel\HttpKernel->handle()
#15 /var/www/www-dev/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(47): Drupal\Core\StackMiddleware\Session->handle()
#16 /var/www/www-dev/core/modules/page_cache/src/StackMiddleware/PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
#17 /var/www/www-dev/core/modules/page_cache/src/StackMiddleware/PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass()
#18 /var/www/www-dev/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(47): Drupal\page_cache\StackMiddleware\PageCache->handle()
#19 /var/www/www-dev/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(52): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
#20 /var/www/www-dev/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
#21 /var/www/www-dev/core/lib/Drupal/Core/DrupalKernel.php(717): Stack\StackedHttpKernel->handle()
#22 /var/www/www-dev/index.php(19): Drupal\Core\DrupalKernel->handle()
# 23 {основной}
Теперь важно отметить, что Я не поддерживаю сайт через Composer - он был установлен до того, как композитор стал решением по умолчанию для установки/обновления. Поэтому я обновляю ядро и модули вручную.
Я успешно использовал очень полезный модуль - Людвиг - который является Альтернатива Composer для модулей contrib, которым требуются внешние библиотеки PHP..
Действительно, ludwig, кажется, находит внешние библиотеки, необходимые для LDAP, см. скриншот (и вот откуда исходит ошибка, библиотека grahl/ldap).
Теперь я искал пакет grahl/ldap и документация и в нем указана библиотека с именем параметры-преобразователь как требование.
Я искал список поставщиков/symfony на своем веб-сервере, и хотя я видел несколько библиотек (например, polyfill-php80, что является еще одним требованием grahl/ldap), я не вижу эту библиотеку options-resolver.
Я пытался вручную загрузить файлы (запустил композитору требуется symfony/options-resolver
в новом произвольном каталоге, увидел, что он извлек, и скопировал содержимое папки options-resolver в vendor/symfony). Однако я не удивлен, что ошибка продолжается, он не может найти класс OptionsResolver.php, хотя он "существует" там, где должен быть (?). Я подозреваю, что он ведет реестр того, что существует - он не просто проверяет путь и ищет файл ....
Это может прозвучать глупо, но я тут в полном неведении - я явно не очень опытен во всем этом..
Я был бы очень признателен, если бы кто-нибудь мог дать подсказку. Извините за слишком подробный вопрос, я просто хотел предоставить как можно больше информации.
Должен ли я установить options-resolver через Composer, хотя я до сих пор не использовал его для установки/обновления ранее?
Любая помощь будет принята с благодарностью..