Несуществующий сервис после обновления

Я обновил свой веб-сайт Contao с 4.13.38 до 5.3.1. Все прошло успешно, Contao Manager работает нормально, но сайт не работает. Ошибка регистрируется в var/logs и указывает на несуществующую службу contao.image.image_sizes:

Uncaught PHP Exception Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: "You have requested a non-existent service "contao.image.image_sizes". Did you mean one of these: "contao.image.imagine", "contao.image.imagine_svg", "contao.image.resizer", "contao.image.sizes"?" at Container.php line 263

{
"exception": 
"[object] (Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException(code: 0): You have requested a non-existent service "contao.image.image_sizes". Did you mean one of these: "contao.image.imagine", "contao.image.imagine_svg", "contao.image.resizer", "contao.image.sizes"? at /opt/testportal/vendor/symfony/dependency-injection/Container.php:263)"
}
{
"request_uri": "https://testportal/contao/login",
"request_method": "GET"
}

И FE, и BE не работают.

В чем здесь может быть проблема? Я искал решение в Интернете, но хотя были похожие вопросы, реального решения я не нашел.

Помимо пакетов contao-core, установлены и обновлены плагины Rockolidthemes (madeyourday).

Ошибка означает, что сервис contao.image.image_sizes не привязан к какой-либо конкретной реализации и, следовательно, не существует. Вам необходимо более внимательно изучить документацию, потому что вы сделали серьезное обновление, и имя этой службы могло быть изменено или, возможно, устарело.

Eyad Bereh 14.03.2024 09:14

Вы проверяли, была ли служба переименована или удалена в более поздней версии Contao?

Nico Haase 14.03.2024 11:34

Я нашел только это: «Общественный статический метод getImageSizes() устарел, начиная с Contao 4.1, и будет удален в Contao 5. Вместо этого используйте службу contao.image.image_sizes». Но, кажется, почему-то эта новая услуга отсутствует.

darkvarK 14.03.2024 12:01

В файлеvendor/contao/core-bundle/config/services.yaml есть одна строка, где я нашел службу с именем contao.image.sizes, но contao.image.image_sizes отсутствует. На данный момент это привлекает меня больше всего внимания.

darkvarK 14.03.2024 13:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
127
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Решение

Проблема была вызвана темой, которую я использовал. Файлы темы также должны быть актуализированы после обновления, но поскольку BackEnd не работает, сделать это путем импорта темы невозможно, и файлы следует заменять вручную через FTP.

В моем случае это была тема Oneo, и файлы, которые использовали не тот сервис:

rsce_oneo_centered_wrapper_start_config.php
rsce_oneo_feature_box_config.php
rsce_oneo_tab_nav_config.php
rsce_oneo_timeline_config.php

В каждом из этих файлов есть строка

'options' => Contao\System::getContainer()->get('contao.image.image_sizes')->getAllOptions(),

а в актуализированной версии (для Contao 5.0 - 5.3) строка изменена на:

'options' => Contao\System::getContainer()->get('contao.image.sizes')->getAllOptions(),

Альтернативное решение:

В папку config необходимо добавить файл Services.yaml со следующим кодом:

services:
    contao.image.image_sizes:
        class: Contao\CoreBundle\Image\ImageSizes
        public: true
        arguments:
          - '@database_connection'
          - '@event_dispatcher'
          - '@contao.translation.translator

Это та же конфигурация, что и для службы contao.image.sizes в core-bundle, но по какой-то причине система ищет contao.image.image_sizes. Поскольку эта служба не существует, мы скопировали определение под названием отсутствующей службы.

Где-то я нашел этот код, возможно, именно поэтому система ищет contao.image.image_sizes

public static function getImageSizes()
    {
        @trigger_error('Using System::getImageSizes() has been deprecated and will no longer work in Contao 5.0. Use the contao.image.image_sizes service instead.', E_USER_DEPRECATED);
        return static::getContainer()->get('contao.image.image_sizes')->getAllOptions();
    }
has been deprecated and will no longer work in Contao 5.0 — так почему вы до сих пор используете эту функцию?
Nico Haase 14.03.2024 15:29

Ты не правильно понял. Я не использую эту функцию. После обновления он остался где-то в системных файлах или в файлах, поставляемых с расширениями/плагинами. Мне не удалось найти ни одного файла, где бы он использовался, но все равно выдавалась эта ошибка.

darkvarK 14.03.2024 15:56

Если вы не используете эту функцию, но используете какой-либо плагин или расширение: проверьте какой из них, а затем проверьте, нужно ли его обновить для совместимости с Contao 5.

Nico Haase 14.03.2024 16:01

Да, мне удалось найти файлы, вызвавшие проблему, и исправить код. Хотя первое решение, которое я написал выше, тоже сработало. Спасибо.

darkvarK 15.03.2024 12:15

Если это не код, который вы написали самостоятельно: редактирование любого расширения или плагина — не лучшая идея.

Nico Haase 15.03.2024 12:16
Ответ принят как подходящий

При обновлении Contao вам также всегда необходимо будет обновлять тему в соответствии с инструкциями поставщика темы, особенно при обновлении до новых второстепенных или основных версий. В вашем случае вы не обновили файлы конфигурации RockSolid Custom Elements темы Oneo, например, для новой версии Contao, что привело к этой ошибке.

Другие вопросы по теме