Как зарегистрировать пользовательские модели сторонних плагинов в Shopware до создания собственного плагина

Магазин может быть расширяемым и настраиваемым, или, по крайней мере, это основная идея этой платформы. Иногда вам нужно будет расширить другой плагин из вашего собственного плагина, в этой статье, в частности, Модели (Doctrine Entities) из другого плагина. Это само по себе (если целевой объект не позволяет расширить его, см. Доктрина Наследования) это теоретически не имеет большого значения.

Например, предполагая, что модель а именно Person из плагина SwagThirdParty существует, мы хотим расширить эту модель в нашем собственном плагине. Новая расширяемая модель будет выглядеть так:

Как видите, модель требует выполнения модели Person, однако в некоторых случаях во время установки плагина с помощью командной строки или менеджера плагина вы можете обнаружить исключение, которое указывает, что модель Person не существует, Хотя SwagThirdPartyPlugin существует и уже установлена.

Решение

Проблема в том, что действительно, модель не будет существовать во время установки вашего собственного плагина. Обычно это происходит только при установке / переустановке плагина с помощью командной строки (Магазин инструментов CLI Tools) как и в этой среде, ваш плагин будет установлен без контекста других установленных сторонних плагинов. Чтобы решить эту проблему, вам нужно будет только зарегистрировать модели плагина, извлекая их вручную во время события установки вашего плагина.

Откройте файл PHP вашего плагина (файл Bootstrap), который в нашем случае OurCodeWorldMyPlugin.php (корневая папка) и добавьте новый приватный метод registerThirdPartyPluginModels к классу:

registerThirdPartyPluginModels("SwagThirdPartyPlugin");
// Now you shouldn't get an exception when you try to register your new models
// during the rest of your code here ....
}
/**
* Register Models of the third party plugin before proceding with the mapping.
*
* Note: this adds a reference to all the models of the plugin with the given name
*/
private function registerThirdPartyPluginModels($thirdPartyPluginName)
{
try {
// As our plugin modifies a model from an external plugin, we need to retrieve the plugin
$plugin = Shopware()->Container()->get('shopware.plugin_manager')->getPluginBootstrap(
Shopware()->Container()->get('shopware.plugin_manager')->getPluginByName($thirdPartyPluginName)
);
// Register Models of the SwagThirdPartyPlugin, which give us access to its models
// during the generation of the schema for your new models.
$plugin->registerCustomModels();
} catch (\Exception $e) {}
}
}

Как видите, новый метод регистрирует все модели плагина по его имени. Вам нужно запустить метод в фрагменте кода, который импортирует новую модель, для которой требуется модель стороннего плагина (в данном случае Программист), или вы увидите исключение.

Удачного кодирования!

Ссылка на основную публикацию
Adblock
detector