Интеграция автозагрузчика композитора в Magento

19

Так что composer - это круто, и в packagist репозитории есть много кода, который облегчает написание расширений Magento.

Проблема, с которой я сталкиваюсь, заключается в том, как лучше (чисто) настроить автозагрузку.

По умолчанию пакеты composer устанавливаются в / vendor, и внутри этого каталога находится файл autoload.php, который устанавливает загрузку классов для управляемых пакетов composer.

Итак, что было бы лучшим способом для файла '/vendor/autoload.php' композитора require_once? Это должно работать как для интернет-магазина, так и для сценариев оболочки. Есть ли событие наблюдателя, которое я могу нажать, чтобы выполнить require_once?

Ура!

Аарон Боннер
источник
Не знаю , поможет ли здесь github.com/magento-hackathon/magento-composer-installer . Я думаю, что это довольно не связано. Я думаю, что вы пытаетесь установить не-Magento пакеты с помощью composer и хотите в основном иметь их в lib /
Alex
Да, вы можете установить composer для установки на lib, если хотите, но я хочу разделить libs / mage libs composer, если это возможно. Также в composer вы можете иметь аккуратные вещи, такие как автозагрузка классов, которая не соответствует механизму автозагрузчика Mage.
Аарон Боннер
1
+1. Похоже, что одна из ранних отправок событий из Mage.php должна сделать свое дело ...?
Календжордан
Я знаю, что на это уже давно ответили, но другой вариант - включить автозагрузчик поставщика в ваш файл index.php (до того, как он require_once $mageFilenameбудет вызван). Это хорошо работает для установки клиента и не требует перезаписи файлов вообще.
Джозеф на SwiftOtter
Ну, вы взламываете основной файл, index.php. При обновлении вам нужно помнить, что вы добавили эту строку кода в index.php.
Аарон Боннер

Ответы:

15

Автозагрузчик Magento зарегистрирован в Mage.php.

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

Согласно анализу Алана, это было бы resource_get_tablename- но вы должны убедиться, что вы обрабатываете это событие только один раз.

Быстрое и грязное решение было бы исправить Mage.php(самое начало файла), но это взломало ядро.

Также у нас есть модуль Magento-PSR-0-Autoloader , который предлагает способ добавления автозагрузки композиторов через config. Это базовая реализация, которая использует resource_get_tablenameсобытие.

Alex
источник
Спасибо Алекс, это прекрасно. Я исправил mage.php, но не хотел запускать его в производство. Наблюдение за resource_get_tablename работало нормально!
Аарон Боннер
4
У Vinai было отличное предложение также поместить Varien_Autoload в локальный пул кода и поместить туда необходимый код, который позволяет избежать дорогостоящих событий наблюдателей и напрямую вносить исправления в основной код.
Аарон Боннер
1
«Простая реализация приведенного выше примера: github.com/thijssnowcountry/magento1_composer_loader » - @ user2594875
Фабиан Шменглер,