Бандлы Pimcore
Бандлы Pimcore следуют тем же правилам, что и обычные бандлы Symfony, но для корректной работы они должны реализовывать интерфейс Pimcore\Extension\Bundle\PimcoreBundleInterface.
Это необходимо для того, чтобы бандл отображался в списке при выполнении команды pimcore:bundle:list. Реализация этого интерфейса дает следующие возможности:
- Бандл отображается в списке команды
pimcore:bundle:listс информацией о том, может ли он быть установлен или удален. - Бандл можно установить с помощью команды
pimcore:bundle:installили удалить черезpimcore:bundle:uninstall. Это инициирует процессы установки/удаления (например, создание или обновление структуры базы данных). - Бандл добавляет методы для нативной регистрации JS и CSS файлов, которые должны загружаться в административном интерфейсе и в режиме редактирования (editmode).
Для быстрого старта вы можете наследоваться от абстрактного класса Pimcore\Extension\Bundle\AbstractPimcoreBundle, который уже реализует все методы интерфейса.
Если вам нужно загрузить ассеты (JS или CSS) в пользовательский интерфейс администратора или режим редактирования, обратитесь к разделу документации Загрузка ассетов в Admin UI.
Установщик
По умолчанию бандл Pimcore не определяет никаких процедур установки или обновления.
Однако вы можете использовать метод getInstaller(), чтобы вернуть экземпляр Pimcore\Extension\Bundle\Installer\InstallerInterface.
Если бандл возвращает объект установщика, он будет использоваться командами pimcore:bundle:install/uninstall.
Метод install может использоваться для создания таблиц базы данных и выполнения других начальных задач. Метод uninstall должен гарантировать отмену всех этих действий. Установщик также является подходящим местом для проверки зависимостей, таких как минимальная версия Pimcore или наличие прав на чтение/запись в файловой системе.
Узнайте больше в разделе Инсталляторы.
Composer-бандлы
Если вы распространяете свой бандл через Composer, он не будет найден автоматически. Чтобы включить директорию вашего пакета в список сканируемых путей, установите тип пакета в pimcore-bundle.
Кроме того, если вы укажете конкретное имя бандла через конфигурацию pimcore.bundles, сканирование файловой системы производиться не будет, что положительно скажется на производительности поиска бандлов.
Рекомендуется всегда явно указывать имя класса бандла в конфигурации extra.
Пример файла composer.json для бандла Pimcore:
{
"name": "myVendor/myBundleName",
"type": "pimcore-bundle",
"autoload": {
"psr-4": {
"MyBundleName\\": ""
}
},
"extra": {
"pimcore": {
"bundles": [
"MyBundleName\\MyBundleName"
]
}
}
}
Возврат версии Composer-пакета
Pimcore предоставляет трейт Pimcore\Extension\Bundle\Traits\PackageVersionTrait, который вы можете включить в свой класс бандла. Этот трейт содержит метод getComposerPackageName, возвращающий имя, определенное в вашем файле composer.json.
Если вы хотите изменить поведение по умолчанию, вам просто нужно переопределить метод getComposerPackageName, чтобы он возвращал имя вашего пакета (например, company/foo-bundle):
<?php
declare(strict_types=1);
namespace Company\FooBundle;
use Pimcore\Extension\Bundle\AbstractPimcoreBundle;
use Pimcore\Extension\Bundle\Traits\PackageVersionTrait;
class FooBundle extends AbstractPimcoreBundle
{
use PackageVersionTrait;
protected function getComposerPackageName(): string
{
// Метод getVersion() будет использовать это имя для чтения
// версии из PackageVersions и вернет нормализованное значение.
return 'company/foo-bundle';
}
}
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.