Шпаргалка по Symfony

Здесь собран и постепенно пополняется список полезных материалов и ссылок на внешние материалы по PHP-фреймворку Symfony.

Последнее изменение: 15 ноября, 2023 в 13:45

Основные ресурсы

С чего начать

  1. Обновить PHP до последней актуальной версии, поддерживаемой фреймворком. Также потребуется актуальная версия пакетного менеджера Composer.
  2. Установить Symfony CLI – инструмент командной строки для создания и запуска проектов на Symfony.
  3. Пройти бесплатный онлайн-курс “Symfony. Быстрый старт“. Также можно купить оффлайн версию книги в формате PDF.
  4. Опциально. При желании и наличии возможности пройти платные курсы 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

Набор библиотек для работы с СУБД. Включает в себя следующие пакеты:

composer req symfony/orm-pack

Создание тестов

Набор пакетов для создания модульных и других тестов.

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

Формы и валидация

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.

composer req api-platform/api-pack

HTTP

HTTP-клиент для Syfmony (github, документация).

composer req symfony/http-client

Пакеты сторонних разработчиков

  • knpuniversity/oauth2-client-bundle – клиент для авторизаци по OAuth2-протоколу. Поддерживается большое количество провайдеров, таких как Яндекс, Google, VK и др.
  • nelmio/security-bundle – пакет для обеспечения безопасности на стороне клиента (защита от XSS и прочее).

Docker

  • Официальная документация – как использовать Docker с Symfony.
  • KubePHP – оптимизированный образ на основе официального образа PHP, ориентированный как для разработки, так и продакшина. Позволяет разрабатывать облачные веб-приложения, ориентированные на запуск в средах оркестрации Kubernetes и Docker Swarm. Поддерживает Symfony из коробки.

Doctrine

Twig

Формы

Создание формы

Шаг 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 }}

Оставьте комментарий

Прокрутить вверх