Я обновил свой веб-сайт 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?
Я нашел только это: «Общественный статический метод getImageSizes() устарел, начиная с Contao 4.1, и будет удален в Contao 5. Вместо этого используйте службу contao.image.image_sizes». Но, кажется, почему-то эта новая услуга отсутствует.
В файлеvendor/contao/core-bundle/config/services.yaml есть одна строка, где я нашел службу с именем contao.image.sizes, но contao.image.image_sizes отсутствует. На данный момент это привлекает меня больше всего внимания.






Решение
Проблема была вызвана темой, которую я использовал. Файлы темы также должны быть актуализированы после обновления, но поскольку 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 — так почему вы до сих пор используете эту функцию?
Ты не правильно понял. Я не использую эту функцию. После обновления он остался где-то в системных файлах или в файлах, поставляемых с расширениями/плагинами. Мне не удалось найти ни одного файла, где бы он использовался, но все равно выдавалась эта ошибка.
Если вы не используете эту функцию, но используете какой-либо плагин или расширение: проверьте какой из них, а затем проверьте, нужно ли его обновить для совместимости с Contao 5.
Да, мне удалось найти файлы, вызвавшие проблему, и исправить код. Хотя первое решение, которое я написал выше, тоже сработало. Спасибо.
Если это не код, который вы написали самостоятельно: редактирование любого расширения или плагина — не лучшая идея.
При обновлении Contao вам также всегда необходимо будет обновлять тему в соответствии с инструкциями поставщика темы, особенно при обновлении до новых второстепенных или основных версий. В вашем случае вы не обновили файлы конфигурации RockSolid Custom Elements темы Oneo, например, для новой версии Contao, что привело к этой ошибке.
Ошибка означает, что сервис
contao.image.image_sizesне привязан к какой-либо конкретной реализации и, следовательно, не существует. Вам необходимо более внимательно изучить документацию, потому что вы сделали серьезное обновление, и имя этой службы могло быть изменено или, возможно, устарело.