Перейти к основному содержимому

Руководство разработчика бандлов

Поскольку Pimcore базируется на мощной системе бандлов Symfony, для начала работы рекомендуется ознакомиться с документацией Symfony Bundles. Бандл может выполнять любые задачи — фактически, основные функции Pimcore (например, интерфейс администратора) реализованы именно как бандлы. Внутри своего бандла у вас есть все возможности для расширения системы: от определения новых сервисов или маршрутов до подключения к системе событий или создания собственных контроллеров и представлений.

Структура директорий бандла

Стандартную структуру папок можно посмотреть в разделе Структура каталогов бандла.

Бандлы Pimcore

Существует специальный тип бандлов, реализующих интерфейс Pimcore\Extension\Bundle\PimcoreBundleInterface, который предоставляет дополнительные возможности. Эти бандлы предлагают API, аналогичный плагинам в предыдущих версиях:

  • Бандл отображается в команде pimcore:bundle:list с информацией о том, может ли он быть установлен или удален.
  • Бандл можно установить командой pimcore:bundle:install или удалить через pimcore:bundle:uninstall для запуска соответствующих процессов (например, создания или обновления структуры базы данных).
  • Бандл добавляет методы для нативной регистрации JS и CSS файлов, которые должны загружаться в интерфейсе администратора и в режиме редактирования.

Для начала работы изучите документацию Pimcore Bundles.

Генерация бандлов Pimcore

Инструмент Pimcore Bundle Generator позволяет быстро создавать скелеты бандлов. Установите и активируйте этот инструмент в вашей среде разработки, чтобы упростить начало процесса.

# Генерация бандла в интерактивном режиме
$ bin/console pimcore:generate:bundle

# Генерация бандла с заданным именем без лишних вопросов
$ bin/console pimcore:generate:bundle --namespace=Acme/FooBundle --no-interaction


Частые задачи

Ниже приведен список распространенных задач и способы их решения внутри бандлов.

Конфигурация сервисов

Чтобы предоставить кастомные сервисы внутри бандла, вам необходимо создать расширение (Extension) для загрузки определений сервисов. Эта тема подробно описана в документации Symfony Extensions.

Пример создания расширения для бандлов можно найти в разделе Loading Service Definitions.

Автоматическая загрузка конфигураций и маршрутов

Бандлы могут содержать файлы конфигурации и маршрутизации в директории Resources/config/pimcore , которые будут загружены автоматически при активации бандла. Подробнее см. Автоматическая загрузка конфигураций и маршрутов.

Интернационализация / Переводы

Смотрите Документацию компонента перевода Symfony для получения информации о местоположениях, в которых будет осуществляться автоматический поиск файлов перевода.

Файлы переводов бандлов должны храниться в директории Resources/translations/ в формате locale.loader (или domain.locale.loader если вы хотите работать с определенной областью перевода). В большинстве случаев это будет Resources/translations/en.yml, что соответствует домену переводов по умолчанию (messages).

Пример: admin.en.yml или messages.en.yml

Домены переводов

Домен перевода считается валидным только после его регистрации:

pimcore:  
translations:
domains:
- site_1
- site_2

В этом случае сервис переводов Pimcore будет использовать только те переводы, которые сохранены в специальных таблицах доменов (например,translations_DOMAIN).

Безопасность и аутентификация

Вы можете полноценно использовать компонент Symfony Security, настроив автозагрузку конфигурации безопасности. Рекомендуется определять параметры безопасности в отдельном файле security.yamlкоторый импортируется в основной config.yaml вашего бандла.

Подробности в разделе Безопасность и аутентификация.

События

Для встраивания в основные функции Pimcore можно использовать любое событие, предоставляемое менеджером событий Pimcore. Пользовательские слушатели событий можно зарегистрировать в вашем бандле, определив сервис прослушивания событий. Читать далее:

Локальное хранилище для бандла

Иногда бандлe требуется сохранить файлы (например, сгенерированные файлы или кэшированные данные, ...). Если данные являются временными и должны быть удалены после очистки кэша Symfony, пожалуйста, используйте каталог внутри каталога кэша. Каталог кэша ядра может быть извлечен из Kernel и зарегистрирован в качестве параметра в контейнере:

  • $kernel->getCacheDir()
  • параметр %kernel.cache_dir%

Если вам нужно постоянное хранилище, создайте уникальный каталог в PIMCORE_PRIVATE_VAR, например var/bundles/YourBundleName.

Расширение интерфейса администратора

Раздел Event_Listener_UI объясняет, как проектировать структуру бандлов и использовать события в PHP-бэкенде и Ext JS фронтенде.

Добавление редактируемых элементов документов (Editables)

Подробную информацию см. в разделе Adding Document Editables


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.