-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
keyboard_arrow_right keyboard_arrow_down
-
-
keyboard_arrow_right keyboard_arrow_down
-
-
-
keyboard_arrow_right keyboard_arrow_down
- YCLIENTS
- Маркетплейс интеграций
- Плагинизация
- Руководство по созданию Backend плагина
- Быстрый старт для разработки PHP-плагинов
Быстрый старт для разработки PHP-плагинов
Требования
- PHP >= 8.2.
- Composer.
- Docker & Docker Compose.
- Git.
1. Клонирование примера плагина
git clone https://github.com/yclients/example-plugin-frontend.git cd example-plugin-frontend
2. Установка зависимостей
composer install
3. Запуск окружения
В проекте есть Makefile, который автоматически создает .env
, собирает образы и поднимает контейнеры:
make up
Он выполнит:
- Генерацию файла
.env
с корректными SYSTEM_UID и SYSTEM_GID. - Сборку Docker-образов.
- Запуск контейнеров (PHP, MySQL, RoadRunner и др.).
4. Попадание в контейнер PHP
make php
Вы окажетесь в shell контейнера в директории /service
.
5. Применение миграций
bin/console doctrine:migrations:migrate
Это создаст тестовую таблицу post
и заполнит ее одной записью.
6. Проверка работы
Откройте в браузере или сделайте curl:
GET http://localhost:8080/post/1
Ожидаемый ответ 200:
{ "id": 1, "title": "Моя тестовая сущность", "description": "Описание тестовой сущности" }
Обзор Makefile-команд
Команда | Описание |
| Перегенерация |
| Сборка образов (make env → docker compose build) |
| Запуск / рестарт контейнеров |
| Остановка и удаление контейнеров |
| Shell в PHP-контейнер |
| Shell в MySQL-контейнер |
| Логи PHP-контейнера |
| Копирование |
Ключевые зависимости в composer.json
Пакет | Назначение |
symfony/framework-bundle | Основной фреймворк Symfony |
baldinof/roadrunner-bundle | Сервер RoadRunner для PHP |
doctrine/doctrine-bundle | Интеграция Doctrine ORM |
doctrine/doctrine-migrations-bundle | Миграции базы данных |
yclients-sdk/sdk-plugin-bundle | YCLIENTS Plugin SDK |
phpstan/phpdoc-parser, phpstan | Статический анализ кода |
ecs, phpmd, rector | Автофикс и проверка стиля кода |
Использование SDK Plugin Bundle для разработки плагинов
Для создания плагинов вы можете использовать готовый набор инструментов — SDK Plugin Bundle. Bundle предоставляет удобную инфраструктуру и упрощенный вызов функций, что значительно ускоряет процесс разработки.
SDK Plugin Bundle включает в себя:
- Готовые адаптеры для работы с базой данных, кэшем и логированием.
- Контракты и интерфейсы, обеспечивающие единый стиль разработки.
- Интеграцию с Symfony и другими компонентами фреймворка.
Подробнее о возможностях SDK Plugin Bundle и его функциях читайте по ссылке.
Стартовый гайд Symfony
Для быстрого погружения в создание первого контроллера и страницы в чистом Symfony обратитесь к официальному документу: https://symfony.com/doc/current/page_creation.html
Здесь вы узнаете:
- Как установить и настроить проект Symfony.
- Как сгенерировать контроллер с помощью MakerBundle (
make:controller
). - Основы аннотаций маршрутов (
#[Route]
). - Создание и рендеринг Twig-шаблона.
- Работу с объектами Request/Response.
Дополнительные полезные разделы документации:
- Маршрутизация (routes): https://symfony.com/doc/current/routing.html
- Контроллеры: https://symfony.com/doc/current/controller.html
- Конфигурация сервисов: https://symfony.com/doc/current/configuration.html
Для более глубокого погружения изучайте оставшуюся часть официальной документации: https://symfony.com/doc/current/index.html созданию REST-эндпоинтов в вашем плагине, используя знакомый вам DatabaseContract
и возвращать JSON вместо HTML.
Дальнейшие шаги
- Пишите юнит- и интеграционные тесты (
vendor/bin/phpunit
). - Запускайте статическую проверку и автофикс («make phpstan», «make ecs:check», «make ecs:fix», «make phpstan», «make phpmd»).