Я хотів би обернути голову, використовуючи атрибути розширення, наприклад, для цитат.
Немає проблеми додавати спеціальний атрибут до такої сутності, використовуючи клас налаштування, як у Magento 1, це питання не стосується цього питання.
На даний момент магія переповнює мене, коли я хочу розкрити такий атрибут, який був доданий розширенням через API сутності як атрибут розширення.
ОНОВЛЕННЯ : Я знаю, як створюються штатні заводи. Це питання стосується спеціальних заводів, які створюють створені реалізації для інтерфейсів створених атрибутів розширення.
Ось кроки, які я вживаю, щоб змусити його працювати. Я додаю це, тому тому, хто намагається відповісти, не потрібно вдаватися до цих деталей.
Моє запитання - ЯК чи ЧОМУ це працює?
Етапи розкриття атрибуту розширення за допомогою API сутності:
- Створіть,
etc/extension_attributes.xmlщо додає атрибут до інтерфейсу сутності - Створіть плагін, щоб додати значення атрибута до
ExtensionAttributesекземпляра сутностей .
Для того, щоб зробити другий пункт, ExtensionAttributesпотрібен екземпляр сутності . З цієї причини плагін залежить від фабрики, яку менеджер об'єктів постачає через DI.
Для котирування товару Magento\Quote\Api\Data\CartItemExtensionFactoryслід використовувати приклад .
Я думаю, що тип цієї фабрики якось повинен стати пусковим механізмом для магії покоління.
Потім Magento генерує відповідний інтерфейс \Magento\Quote\Api\Data\CartItemExtensionInterfaceіз сеттерами та getters для всіх атрибутів розширення.
Однак, схоже, це не генерує конкретної реалізації цього інтерфейсу. В оренді PHPStorm його не бачить.
Як Magento збирає інформацію, необхідну для створення класу? Як можна викликати створені методи інтерфейсу на конкретному екземплярі? Це клас, який просто генерується лише в пам'яті?
Я щасливий, що це працює, але це насправді не задовольняє. Можливість Magentos використовувати атрибути, створені автоматично розширеннями, є одним з ключових факторів його успіху. Як розробник модулів, я вважаю, що мені потрібно глибоке розуміння всього процесу.
Якщо я маю час, я б просто розібратися в цьому сам, але я вважаю за краще, якби я міг отримати пояснення.
ОНОВЛЕННЯ 2 : Витратили трохи часу для читання \Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGeneratorта \Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator. Тепер я, принаймні, маю грубе уявлення про те, що відбувається. Якщо мене ніхто не переможе, я напишу опис повного процесу в один момент, оскільки, думаю, це буде корисним посиланням.