• Resolved LeTraceurSnork

    (@letraceursnork)


    По следам своего же треда: https://wordpress.org/support/topic/%d0%bd%d0%b0%d1%80%d1%83%d1%88%d0%b5%d0%bd%d0%b8%d0%b5-%d1%81%d0%be%d0%b2%d0%bc%d0%b5%d1%81%d1%82%d0%b8%d0%bc%d0%be%d1%81%d1%82%d0%b8-%d1%81-psrlogloggerinterface/

    То же самое приложение, теперь я уже пытаюсь дотащить непосредственно Monolog:3.8.1 и его требования Psr\Log:^2.0|^3.0. Ваш плагин при этом использует версию Psr\Log:^1.0, причём затаскивая его непосредственно в свои ассеты и при этом определяя его неймспейс как Psr\Log. Таким образом, когда тема и её бэковая часть загружается, плагины уже прогрузились и неймспейс становится занят, композер его не переопределяет и использует вашу версию Psr\Log, несмотря на то, что имеется более свежая. Именно поэтому все реализации “свежего” логгера (в т.ч. Monolog) не работают и отдают ошибку вида:

    Declaration of Monolog\\Logger::emergency(Stringable|string $message, array $context = []): void must be compatible with Psr\\Log\\LoggerInterface::emergency($message, array $context = [])

    Прошу выкатить патч, в котором либо версия Psr\Log будет обновлена, либо он вообще будет выпилен из исходников плагина

Viewing 8 replies - 1 through 8 (of 8 total)
  • Thread Starter LeTraceurSnork

    (@letraceursnork)

    Шаги воспроизведения:

    1. Установить плагины woocommerce и Юкаssа для Woocommerce
    2. Установить (или самому написать) плагин, который во внешних зависимостях требует или приносит с собой логгер через Psr/Log:^1.0
    3. В приложении установить monolog/monolog:3.8.1 (или другую зависимость с требованием Psr/Log:^3.0
    4. В плагине вызвать любой метод логгера (в частности, у меня ругался на emergency):
    require_once __DIR__ . '/vendor/autoload.php';

    $logger = new NullLogger();
    $logger->critical('123');
    1. В теме (например, в functions.php) вызвать логгер уже приложения:
    require_once ABSPATH . 'vendor/autoload.php';

    use Monolog\Logger;

    $logger = new Logger('test_logger');
    $logger->critical('123');

    В итоге получаем ошибку:

    Fatal error: Declaration of Monolog\Logger::emergency(Stringable|string $message, array $context = []): void must be compatible with Psr\Log\LoggerInterface::emergency($message, array $context = []) in /usr/src/wordpress/vendor/monolog/monolog/src/Monolog/Logger.php on line 683

    Судя по всему, связано с тем, что плагины загружаются раньше темы и, соответственно, раньше композера темы и автозагрузка успевает загрузить Ваш Psr\Log\LoggerInterface и все последующие классы имплементируют его

    ostulov

    (@ostulov)

    В плагине ЮKassa для WooCommerce мы обеспечиваем поддержку в том числе старых версий PHP, а monolog/monolog:3 и psr/log:2/3 подходят только для PHP 8.

    Мы не планируем в ближайшее время нарушать совместимость для старых версий PHP.

    Вы можете попробовать обновить у себя SDK для плагина, скачав его отсюда:
    https://git.yoomoney.ru/projects/CMS/repos/cms-woocoomerce/browse/includes/lib
    При переходе на эту версию SDK потребуются также доработки в коде, так как в новых версиях SDK обновлены неймспейсы:
    https://git.yoomoney.ru/projects/SDK/repos/yookassa-sdk-php/browse/docs/examples/migration-3x.md

    Thread Starter LeTraceurSnork

    (@letraceursnork)

    Планируете ли Вы выпустить версию плагина ^3.0 вслед за поднятием версии SDK ?

    ostulov

    (@ostulov)

    В ближайших планах – нет.

    Thread Starter LeTraceurSnork

    (@letraceursnork)

    Получается, чтобы плагин работал с SDK ^3.0 и с логгером ^2.0|^3.0 – нужно самому сидеть и его перерабатывать? А как быть в случае выхода обновления?

    ostulov

    (@ostulov)

    Да, для Вашей задачи Вам потребуется вручную вносить изменения в код плагина. При каждом обновлении плагина изменения придется актуализировать.

    Thread Starter LeTraceurSnork

    (@letraceursnork)

    В таком случае убедительно прошу в обозримом будущем обновить версию плагина до ^3.0 с повышением psr\log до тех же ^3.0

    Нужно ли написать об этом в какой-то багтрекер или коробку предложений?

    ostulov

    (@ostulov)

    Спасибо, мы рассмотрим Ваше предложение! Дополнительных запросов не требуется.

Viewing 8 replies - 1 through 8 (of 8 total)

The topic ‘Нарушение совместимости с \Psr\Log\LoggerInterface’ is closed to new replies.