Я в своих модулях для Magento 2 перед запуском Magento загружаю свои мини-библиотеки, интерфейс которых доступен не в стандартном виде классов, а виде глобальных функций с короткими именами (пример: rm_customer_logged_in()
).
<type name='\Magento\Framework\AppInterface'>
<plugin
name='Df\Framework\AppInterfacePlugin'
type='Df\Framework\AppInterfacePlugin'
sortOrder='100'
/>
</type>
<?php
namespace Df\Framework;
use \Magento\Framework\AppInterface;
class AppInterfacePlugin {
/**
* @see \Magento\Framework\AppInterface::launch()
* @param AppInterface $subject
* @return array
*/
public function beforeLaunch(AppInterface $subject) {
// Place your custom initialization code here.
return [];
}
}
Такая инициализация не работает для консольных приложений (например, setup:upgrade
).
Для консольных приложений я использую подписку на события:
<event name='store_collection_load_before'>
<observer
name='Df\Core\Boot'
instance='Df\Core\Boot'
method='storeCollectionLoadBefore'
/>
</event>
<?php
namespace Df\Core;
use \Magento\Framework\Event\Invoker\InvokerDefault;
use \Magento\Framework\Event\Observer as _O;
class Boot {
/**
* @used-by InvokerDefault::_callObserverMethod()
* @param _O $o
* @return void
*/
public function storeCollectionLoadBefore(_O $o) {
if (!self::$_done && 'cli' === PHP_SAPI) {
self::run();
}
}
// other code here...
}
С октября 2015 года порядок подписки на события и обработки событий в Magento 2 изменились: Как в Magento 2 подписаться на событие и обработать его