Проблема хорошо известна: lib
классы загружаются исключительно через автозагрузчик, и мы не можем изменить их, кроме:
- Копирование их полностью в codePool, который проверяется раньше, чем lib.
- Установка автозагрузчика PSR-0 , указание карты классов автозагрузки, а затем полное копирование файла в эту структуру папок. [мое текущее решение]
Я в затруднительном положении, потому что хочу потрогать многие из этих файлов - но ради моего здравомыслия и стабильности / возможности обновления магазина не хочу копировать целые классы библиотеки.
Теперь очевидно, что есть потенциальные решения этой проблемы, но все они имеют свои собственные проблемы:
- Пройдите маршрут AOP и используйте основанную на PHP библиотеку, такую как Go! АОП : В последний раз, когда я проверял, для этого потребуется, чтобы классы Magento загружались автозагрузчиком композитора, а не только один из них был доступен. Flyingmana проделала определенную работу в этой области, но она определенно не готова к использованию, и мои потребности более насущны. Я также хочу отправить как расширение, и это потребовало бы больше настройки композитора.
- Пройдите маршрут AOP и используйте собственное расширение PHP : вероятно, наиболее выгодное на данный момент, но для этого потребуется установить отдельное расширение, не говоря уже о том, что оно не будет работать с HHVM.
- Используйте PHP classkit и / или runkit : это еще одно собственное расширение PHP, поэтому у него та же проблема, что и выше.
- Патч-сайты вызовов используют мою собственную
\Danslo\Varien_X
версию namespaced ( ), а затем расширяются от оригинала (\Varien_X
): слишком много сайтов для патчей, чтобы исправить, и это потребовало бы глупого количества переписываний. Не вариант. Сверните мое собственное: должно быть возможно:
- Напишите мой собственный автозагрузчик.
- Скопируйте исходный класс в отдельную папку (
{root_dir}/var/tmp
), оберните егоnamespace \Magento { < original contents > }
. - Включите этот файл.
- Включить мой измененный класс
OriginalClass extends Magento\OriginalClass {}
Недостаток этого очевиден: динамическая генерация кода, регулярные выражения, небольшие накладные расходы на загрузку переписанных классов. Но я почти уверен, что на этом этапе было бы лучше копировать ~ 5000 строк кода, когда я просто хочу коснуться / добавить ~ 100 строк.
Я знаю, что спрашиваю много, но есть ли что-то современное и относительно чистое, что помогает решить эту проблему?