Здесь собран и постепенно пополняется список полезных материалов и ссылок на внешние материалы по PHP-фреймворку Symfony.
Последнее изменение: 15 ноября, 2023 в 13:45
Основные ресурсы
- Официальный ресурс: https://symfony.com
- GitHub: https://github.com/symfony/
С чего начать
- Обновить PHP до последней актуальной версии, поддерживаемой фреймворком. Также потребуется актуальная версия пакетного менеджера Composer.
- Установить Symfony CLI – инструмент командной строки для создания и запуска проектов на Symfony.
- Пройти бесплатный онлайн-курс “Symfony. Быстрый старт“. Также можно купить оффлайн версию книги в формате PDF.
- Опциально. При желании и наличии возможности пройти платные курсы SymfonyCasts (на английском языке).
Создание нового проекта
Проверить зависимости, необходимые для работы Symfony
symfony check:requirements
Создать проект с помощью Symfony CLI
symfony new my_project_name
Стандартный шаблон включает в себя следующие пакеты: symfony/console
, symfony/dotenv
, symfony/framework-bundle
(включает: symfony/cache
, symfony/config
, symfony/routing
и другие). Подходит для микросервисов, консольных приложений, API и т. п.
Альтернативный вариант создания проекта без Symfony CLI
composer create-project symfony/skeleton my_project_name
Версия с расширенным набором пакетов
symfony new my_project_name --webapp
Включает множество дополнительных пакетов, полезных для традиционных веб-приложений. Набор может быть избыточен, в таком случае можно воспользоваться базовой версией шаблона приложения и подключить все необходимые пакеты вручную.
Альтернативный вариант создания проекта без Symfony CLI
composer create-project symfony/website-skeleton my_project_name
Symfony CLI
Запуск сервера
symfony server:start -d
Остановка сервера
symfony server:stop
Просмотр логов
symfony server:logs
Запуск асинхронной команды с автоматическим перезапуском при внесении изменений в файлы исходных кодов
symfony run -d --watch=config,src,templates,vendor symfony console messenger:consume async
Сборка encore с переменной окружения
API_ENDPOINT=`symfony var:export SYMFONY_PROJECT_DEFAULT_ROUTE_URL --dir=..` yarn encore dev
Проверка пакетов на безопасность
symfony check:security
Основные пакеты
Здесь перечислены основные расширения для Symfony.
Инструменты разработки
- Debug Bundle – интеграция компонента VarDumper и команды ServerLogCommand (
bin/console server:dump)
. - Profiler – инструмент отладки запросов.
- Maker – инструмент командной строки для генерации кода.
- Monolog Bundle – интеграция библиотеки Monolog для логирования
composer req symfony/debug-bundle --dev
composer req symfony/profiler-pack --dev
composer req symfony/monolog-bundle
Мета-пакет, включающий все выше перечисленные пакеты:
composer req symfony/debug-pack
Make Bundle:
composer req symfony/maker-bundle --dev
Doctrine
Набор библиотек для работы с СУБД. Включает в себя следующие пакеты:
- Doctrine/ORM – Object-Relation Mapper.
- Doctrine/DoctrineBundle – Doctrine DBAL & ORM бандл для Symfony.
- Doctrine/DoctrineMigrationsBundle – интеграция библиотеки Doctrine Migrations для Symfony.
composer req symfony/orm-pack
Создание тестов
Набор пакетов для создания модульных и других тестов.
- PHPUnit – фреймворк для разработки тестов.
- DoctrineFixturesBundle – интеграция Doctrine Data Fixtures в Symfony (документация).
- DoctrineTestBundle – бандл для изоляции тестов (откат транзакций после выполнения).
composer req symfony/test-pack --dev
composer req doctrine/doctrine-fixtures-bundle --dev
composer req dama/doctrine-test-bundle --dev
Panther – бандл для создания веб-тестов.
composer req symfony/panther --dev
Формы и валидация
- Компонент для создания форм (github, документация)
- Компонент для создания ограничений и валидаторов (github, документация)
composer req symfony/form
composer req symfony/validator
EasyAdmin
Бандл для быстрой разработки административных интерфейсов.
composer req easycorp/easyadmin-bundle
Аутентификация и авторизация
Security Bundle (документация) – содержит множество инструментов для обеспечения безопасности приложения.
composer req symfony/security-bundle
Конечные автоматы
Workflow Component (github, документация) – инструменты для управления рабочим процессом или конечным автоматом.
composer req symfony/workflow
Интернализация
composer req symfony/translation
Извлечение строк для перевода в формате Yaml
php bin/console translation:extract \
--force --format=yaml --sort=asc \
--as-tree=3 ru
Шаблонизатор Twig и расширения
- Twig – шаблонизитор.
- Twig/Intl – вспомогательные функции, использующие расширение интернационализации intl.
- Twig/CssInliner – фильтр inline_css для внедрения кода CSS.
- Twig/Inky – фильтр inky_to_html для внедрения шаблонов Inky Email.
- Twig/String – вспомогательные функции для работы со строками.
- Twig/Html – содержит пару функций для HTML.
- Twig/Markdown – конвертор разметки Markdown в HTML и обратно.
Установка
composer require twig/extra-bundle
Расширения для Twig
composer req twig/intl-extra:
composer req twig/cssinliner-extra
composer req twig/inky-extra
composer req twig/string-extra
composer req twig/html-extra
composer req twig/markdown-extra
Assets – компонент для генерации ссылок в шаблонах (github, документация).
composer require symfony/asset
Асинхронное выполнение кода и передача сообщений
Messenger Component – компонент (документация), помогающий приложениям передавать и получать сообщения от других приложений с помощью очереди сообщений.
composer req symfony/messenger
Фронтенд
Бандл, интегрирующий WebPack Encore (документация) в Symfony. WebPack Encore – это простой способ интеграции WebPack в веб-приложение.
composer req symfony/webpack-encore-bundle
UX Turbo – интеграция Hotwired Turbo в приложение.
composer req symfony/ux-turbo
Stimulus
Набор JavaScript библиотек для организации и переиспользования кода. Отлично подходит для веб-приложений с серверным рендерингом страниц (в частности Twig в Symfony).
Письма и уведомления
Mailer Componet (документация) – компонент для формирования и отправки электронных писем.
composer req symfony/mailer
Notification Component (документация) – универсальный компонент для формирования и отправки сообщений (уведомлений) в различные каналы связи (email, sms, push-уведомления, мессенджеры и т. п.).
composer req symfony/notifier
Каналы связи распространяются в виде отдельных пакетов (список всех доступных каналов), например:
composer req symfony/mattermost-notifier
API
Комплексный компонент для разработки API.
- Официальный ресурс
- Документация The API Platform Code Library
composer req api-platform/api-pack
Пакеты сторонних разработчиков
- knpuniversity/oauth2-client-bundle – клиент для авторизаци по OAuth2-протоколу. Поддерживается большое количество провайдеров, таких как Яндекс, Google, VK и др.
- nelmio/security-bundle – пакет для обеспечения безопасности на стороне клиента (защита от XSS и прочее).
Docker
- Официальная документация – как использовать Docker с Symfony.
- KubePHP – оптимизированный образ на основе официального образа PHP, ориентированный как для разработки, так и продакшина. Позволяет разрабатывать облачные веб-приложения, ориентированные на запуск в средах оркестрации Kubernetes и Docker Swarm. Поддерживает Symfony из коробки.
Doctrine
- Doctrine best practices – презентация по лучшим практикам использования Doctrine и ORM (на английском языке). Для лучшего понимания практик рекомендуем к прочтению книгу Объекты. Стильное ООП.
- Get Results From Doctrine As DTOs – пример создания DTO-объектов с помощью репозиториев Doctrine.
Twig
- Официальный сайт: https://twig.symfony.com/
- Cheatsheet: https://github.com/okeeffed/cheat-sheets/blob/master/twig-cheat-sheet.md
- Документация: https://symfony.com/doc/current/templates.html
Формы
Создание формы
Шаг 1. Сгенерировать Entity.
bin/console make:entity
Файл будет создан в директории src/Entity.
Шаг 2. Сгенерировать класс формы. Название класса должно заканчиваться на Type.
bin/console make:form
Файл будет создан в директории src/Form.
Шаг 3. Сгенерировать контроллер.
bin/console make:controller
Файл будет создан в директории src/Controller. Шаблон будет создан в директории templates.
Шаг 4. Отредактировать класс контроллера.
#[Route('/example', name: 'app_example')]
public function index(Request $request): Response
{
// создание формы с помощью встроенной фабрики
// в качестве первого аргумента передается название класса с формой
$form = $this->createForm(ExampleType::class);
// если нужно изменить существующую Entity или заполнить новую, передайте экземпляр класса вторым аргументом
// $form = $ths->createForm(ExampleType::class, $exampleEntityObject);
// выполнение обработчика запроса
$form->handleRequest($request);
// isSubmitted проверяет была ли отправлена форма пользователем (POST-запрос)
// isValid проверяет были ли ошибки при заполнении формы
if ($form->isSubmitted() && $form->isValid()) {
// форма успешно отправлена и не содержит ошибок валидации
dd($form->getData());
// dd($exampleEntityObject);
}
return $this->render('example/index.html.twig', [
'form' => $form,
]);
}
Шаг 5. Добавить форму в шаблон.
{{ form_start(form) }}
{{ form_row(form.title) }}
{{ form_row(form.body) }}
<input type="submit">
{{ form_end(form) }}
Настройка темы для форм
Открыть файл config/twig.yaml. В секцию twig добавить следующую строку:
twig:
...
form_themes: ['bootstrap_5_layout.html.twig']
Подробнее см. в документации.
Прочее
Внедрение глобальных переменных в классы и шаблоны
Создать переменную окружения в файле .env:
APP_VAR=example
В файле config/services.yaml добавить следующие строки:
parameters:
app_var: '%env(APP_VAR)%'
services:
_defaults:
bind:
$appVar: '%app_var%'
Внедрить переменную в контроллер или любой другой сервисный класс через конструктор.
public function __construct(private readonly string $appVar) {
}
Для передачи переменной в Twig, открыть файл config/packages/twig.yaml и добавить следующую строку:
twig:
globals:
app_var: '%app_var%'
Вывести значение переменной в любом шаблоне:
{{ app_var }}