Вопрос

<Сильная> Дата: 30 мая 2015 г. (Учитывая изменяющийся характер Magento 2).

Magento 2 представил Концепция плагина , реализована через шаблон перехватчика .

Что не ясно из документов - какие классы и объекты в Magento являются «перехватываемыми»? То есть вы настраиваете плагин с XML, который выглядит следующим образом

<config>
    <type name="{ObservedType}">
        <plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="true"/>
    </type>
</config>
.

Но не понятно, какие классы действительны как генеракодицетагкод. Это Старая статья Wiki предоставляет некоторые подсказки, когда он говорит

Обратите внимание, что функция плагина не применяется к - Классы, созданные без впрыска зависимостей, то есть созданы с новым напрямую, -fine, -fine, -финальными классами

любой объект , созданный с помощью инъекций зависимости, доступных для перехвата? Должен ли генеракодицетагкод должен быть подсказкой типа, предусмотренный в методе генеракодицетагкода, или может он (должен ли он?) Быть чем-то другим?

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

Это было полезно?

Решение

Каждый класс модуля Magento включен.

Как описано на текущем Wiki, он ограничен конечными методами и классами

не подтвержден, но классы библиотек (Dib Directory) являются (/ должны) не разрешено перехватить.

Ограничение, как созданный объект не соответствует действительности, я думаю, по крайней мере, если автозагрузчик правильно настроен.И не должно иметь значения, когда они не создаются на лету, но когда генератор выполнил.(так что это только вопрос, автозагрузчик Magento должен быть первым)

Другие советы

Мы работаем над аннотациями «@API», чтобы аннотировать Рекомендовать методы , которые будут более устойчивыми к выпускам. Если вы беспокоитесь о обновлении, в дополнение к тому, что CAN есть определенный плагин, вы также должны учитывать, что должен иметь определенный плагин. Мы не рекомендуем перехватить методы не- @ методов API, но иногда мы знаем, что может быть лучшим вариантом. (Мы оставляем это на усмотрение разработчика.)

Официально, вы можете перехватить публичные методы, которые не являются окончательными. Частные методы определенно не будут работать. Из памяти, перехват в настоящее время работает, создавая класс потомков, который наследует реальный класс (структура инжекции зависимостей создает экземпляры сгенерированного класса, когда вы просите нового экземпляра реального класса). Так что все, что позволит создавать подкласс, и оригинальный метод, переопределенный, вероятно, будет работать, но рекомендуется общедоступные методы, предоставляя нам гибкость для использования какой-либо другой умной реализации в будущем (что никогда не произойдет реалистично без веской) ,

Я знаю, что это уже ответ, но это от 2 лет назад. Может быть, некоторые вещи изменились в то же время.

Вот то, что я нашел до сих пор.
От Официальная документация и от копания в процесс перехвата.

Я отвечу на другую сторону.
Что не может быть перехвачена в Magento 2.
От официального доктора

    .
  • объекты, которые призваны до того, как Magento \ Framework \ Interception загружается (не уверен, где это точка)
  • последние методы
  • Любой метод от окончательных классов (потому что генерированный класс перехватчика должен продлить исходный класс)
  • Любой класс, который содержит хотя бы один конечный общественный метод
  • Непубличные методы (он может работать на защищенные методы, но это не «этичность», поскольку оно будет разоблачить непубличные методы на внешнюю часть класса)
  • Статические методы
  • __ конструкция
  • Виртуальные типы

от копания вокруг

    .
  • Методы в классах, которые не создаются с помощью менеджера объекта. (Пример генеракодицетагкода)
  • классы, реализующие генеракодицетагкод. (Например, \Magento\Framework\Phrase и все остальные аутогенераторыми прокси)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top