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