Prestashop Guzzle Conflict - PullRequest
       14

Prestashop Guzzle Conflict

0 голосов
/ 18 декабря 2018

Я обновляю модуль , включая пакет, который использует 6.0.

Prestashop 1.7 использует более старую версию Guzzle 5.

Когда я устанавливаю плагин на Prestashop, версия Guzzle включенного пакета конфликтует с Prestashop, что приводит к следующей ошибке .

Uncaught PHP Exception InvalidArgumentException: "Магический запросдля методов требуется URI и массив необязательных опций "at /var/www/html/modules/package/vendorpackage/guzzlehttp/guzzle/src/Client.php line 81 {" exception ":" [object] (InvalidArgumentException (code: 0): Для магических запросов требуются URI и массив необязательных опций в /var/www/html/modules/package/vendorpackage/guzzlehttp/guzzle/src/Client.php:81) "} []

Я нашел еще несколько примеров подобных проблем:

Основываясь на них, у меня есть несколько идей, как обойти эту проблему.Ни один из них не кажется правильным способом сделать это.Конечно, есть более чистый способ решения таких проблем с помощью ?

  • Удалить Guzzle из прилагаемого пакета - это самый простой, моя проблема с этим заключается в том, что если я удаляю эту зависимость, где она останавливается, что сказать, какие-либо другие зависимости не будут конфликтовать позже по той линии, которая не может быть удалена?

  • МожетПроверьте версию Guzzle в пакете и вызовы подкачки, в зависимости от того, какой из них загружает - аналогично вышеприведенной проблеме, я могу взломать исправление, чтобы определить, какой тип вызова мне следует использовать для этой ошибки, но я не могу сказать, какие другие проблемыэто может привести к повышению, и мой код может оказаться изобилующим инструкциями для каждой версии.

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

  • Fork Guzzle и обратитесь к этой версии .Я мог бы раскошелиться и включить его в пакет VCS в плагине.Проблема в том, что я должен продолжать двигаться вперед.

Ответы [ 4 ]

0 голосов
/ 30 января 2019

Вы можете просто использовать "guzzlehttp/guzzle": "~5.0", в файле composer.json вашего модуля и вы ту же версию, которая использует prestashop.

0 голосов
/ 09 января 2019

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

  • Плюсы

Вы экономите много времени

  • Минусы

Вы используете другой пакет, чтобы сделатьто же самое.

Способ умеренный состоит в том, чтобы разжечь вилку, а затем вручную изменить пространства имен.

  • Плюсы

Вы ничего не меняете в Prestashop.

Если Prestashop обновился до версии 6.0, вы можете легко переключиться на нее.

  • Минусы

Вы должны поддерживать свою собственную индивидуальную жадность.

Самый сложный способ - это исправить Prestashop самостоятельно

  • Плюсы

Вы получаете все, что хотите.

Отправьте запрос на включение, вы можете помочь многим другим.

  • Минусы

Если Prestashop продолжит использовать guzzlehttp 5.0, вы окажетесь в патчном кошмаре.

Выводы

Я бы выбрал умеренный способ, если я должен использовать жрать.Если бы я просто хотел сделать что-то особенное в нескольких строках кода, я бы просто использовал альтернативный пакет. И НЕТ вы не можете устанавливать разные версии одного и того же пакета с помощью композитора.

0 голосов
/ 09 января 2019

Краткий ответ: вы ничего не можете сделать.

Длинный ответ: Я нашел способ обойти вашу проблему, учитывая, что я нахожусь в той же ситуации.

Если ваш модуль зависитдля пакета, который зависит от Guzzle, и если этот пакет находится под вашим контролем, вы можете использовать свой пакет HTTPlug .Это абстракция, и она опирается на то, что кто-то еще включает в себя настоящую клиентскую библиотеку HTTP.То, что кто-то также может быть вами, включая другую реализацию php-http / client-creation .

Со временем, так как Prestashop может также использовать этот подход (наряду с другими платформами), всеиз них может в конечном итоге полагаться на PSR-7 абстракции HTTP-сообщений .

Это на самом деле не решение вашей текущей проблемы, а скорее стратегия на долгосрочную перспективу, которая также может помочьс тем, где вы сейчас находитесь.

0 голосов
/ 06 января 2019

В вопросе не указано, в чем состоит основная цель.Если ваша основная цель - обновить Prestashop (а не устранить конкретную ошибку), я предлагаю создать локальную установку среды Prestashop - и использовать ее для обновления производственной среды вручную, файл за файлом.Я могу сделать это следующим образом:

  1. Создайте свежую установку Prestashop в предполагаемой версии (1.7.5?) На локальном компьютере (используйте новую базу данных).Composer гарантирует, что обе установки используют одинаковые зависимости.

  2. Резервное копирование рабочей базы данных и ее восстановление на локальном сервере базы данных.

  3. Переконфигурируйте локальный Prestashop для связи с локальной базой данных.

  4. Обновите локальный Prestashop.Убедитесь, что эта обновленная установка работает.

  5. Сравните локальную установку с удаленной установкой с использованием инструмента сравнения (например, Beyond Compare ).Любые различия между двумя установками необходимо обрабатывать в каждом конкретном случае:

    • Копировать новый / обновленный код из локальной установки в удаленную установку.
    • Удалите все устаревшие файлы изудаленная установка.
  6. Обновите производственную базу данных.

Не забудьте сделать резервную копию программного обеспечения и базы данных перед началом работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...