Руководство разработчика бандлов
Поскольку 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. Пользовательские слушатели событий можно зарегистрировать в вашем бандле, определив сервис прослушивания событий. Читать далее:
- Symfony Event Dispatcher — документация по созданию и регистрации слушателей событий.
- Pimcore Event Manager — список доступных событий.
Локальное хранилище для бандла
Иногда бандлe требуется сохранить файлы (например, сгенерированные файлы или кэшированные данные, ...). Если данные являются временными и должны быть удалены после очистки кэша Symfony, пожалуйста, используйте каталог внутри каталога кэша. Каталог кэша ядра может
быть извлечен из Kernel и зарегистрирован в качестве параметра в контейнере:
$kernel->getCacheDir()- параметр
%kernel.cache_dir%
Если вам нужно постоянное хранилище, создайте уникальный каталог в PIMCORE_PRIVATE_VAR, например var/bundles/YourBundleName.
Расширение интерфейса администратора
Раздел Event_Listener_UI объясняет, как проектировать структуру бандлов и использовать события в PHP-бэкенде и Ext JS фронтенде.
Добавление редактируемых элементов документов (Editables)
Подробную информацию см. в разделе Adding Document Editables
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.