Дата: 30 мая 2015 года (учитывая изменяющуюся природу Magento 2).
Magento 2 представил концепцию плагина , реализованную с помощью шаблона перехватчика .
Что не ясно из документации - какие классы и объекты в Magento «перехватываются»? То есть вы настраиваете плагин с XML, который выглядит следующим образом
<config>
<type name="{ObservedType}">
<plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="true"/>
</type>
</config>
но не ясно, какие классы действительны как ObservedType
. Эта старая статья в вики дает некоторые подсказки, когда говорит
Обратите внимание, что функция плагина не распространяется на - классы, созданные без внедрения зависимостей, то есть созданные непосредственно с оператором new, -Final методы, -Final классы
Является ли какой - либо объект , созданный с помощью инъекции зависимостей , доступной для перехвата? Нужно ли ObservedType
указывать подсказку типа в __construct
методе a или это может быть что-то еще?
Главным образом пытаясь понять, что можно и что нельзя делать с перехватчиком Magento 2, прежде чем я начну их использовать.
источник
Мы работаем над аннотациями "@api", чтобы комментировать рекомендуемые методы, которые будут более стабильными в разных выпусках. Если вы беспокоитесь о возможности обновления, в дополнение к тому, что может иметь определенный плагин, вы должны также подумать о том, что должен быть определен плагин. Мы не рекомендуем перехват не-api методов, но иногда мы знаем, что это может быть лучшим вариантом. (Мы оставляем это на усмотрение разработчика.)
Официально вы можете перехватить публичные методы, которые не являются окончательными. Частные методы определенно не будут работать. Из памяти перехват в настоящее время работает путем создания класса-потомка, который наследует реальный класс (среда внедрения зависимостей создает экземпляры сгенерированного класса, когда вы запрашиваете новый экземпляр реального класса). Так что все, что позволит создать подкласс и переопределить оригинальный метод, вероятно, будет работать, но публичные методы рекомендуются, что дает нам гибкость в использовании какой-то другой умной реализации в будущем (что никогда не будет реалистичным без веской причины) ,
источник
Я знаю, что на это уже есть ответ, но это было 2 года назад. Может быть, кое-что изменилось за это время.
Вот что я нашел до сих пор.
Из официальной документации и от копания в процессе перехвата.
Я отвечу наоборот.
Что НЕ МОЖЕТ быть перехвачено в Magento 2.
Из официального документа
Копаться
\Magento\Framework\Phrase
)\Magento\Framework\ObjectManager\NoninterceptableInterface
. (Например\Magento\Framework\App\Cache\Proxy
и все другие автоматически сгенерированные прокси)источник