PHPUnit

Особенный запуск PHPUnit в симфони

PHPUnit в симфони запускается через собственный бинарный файл. Это сделано для того, чтобы подсвечивать deprecated методы самой симфони. Некое расширение phpunit
Поэтому запуск phpunit нужно производить через команду в корне проекта
php bin/phpunit

Flex и recipes(рецепты)

Флекс позволяет автоматизировать установку разных плагинов для симфони. Такие скрипты называются рецептами
Рецепт для PHPUnit
image.png
В манифесте прописываются основные действия
image.png

Конфиги

Описание

Конфиги в симфони записываются в нескольких форматах. Yaml, xml и в виде php. Чаще всего используется yaml, но в сторонних плагинах используют xml
Для php указывается не просто конфиг, а функции. На скрине пример для роутинга. Но также можно эти функции запускать через аннотации
image.png

Почему иногда лучше указывать конфиги в xml, а не yaml?

XML дает преимущество в автодополнении IDE. Можно составить схему и IDE будет подсказывать нужные параметры. Это очень удобно для сторонних библиотек. В своем же коде, особенно в небольших конфигах, удобно юзать yaml, которые не предоставляет подсказок и можно опечататься

Как посмотреть полный конфиг для бандла

Дефолтные настройки могут быть указаны в vendor файлах и не показывается в исходном коде. Чтобы посмотреть весь конфиг нужно указать команду
debug:config TwigBundle (название бандла)
Например, для твига указываются такие настройки в коде проекта
image.png
Но на самом деле заданных настроек больше
image.png

Кеширование

Прогрев кеша (warmup)

Перед деплоем новой версии на прод первый запрос будет создавать новый кеш. Чтобы избежать этого можно заранее “прогреть”(создать) этот кеш и отправить “готовый продукт” на прод

Аннотации

Описание

Аннотации указываются в комментариях. И дальше парсятся через рефлексию. Аннотации - это по сути такой же вызов функций php и также можно вызывать полные namespace

Аннотации медленные из-за рефлексии?

Рефлексия требует много вычисления, но симфони просто кеширует все роутинги и больше не использует рефлексию при следующих запросов. Перед деплоем новой версии на прод можно кеш “прогреть”, то есть заранее создать нужный кеш и не тратить время первого запроса на разные вычисления

Роутинг (маршрутизация)

Конфиг

Конфигурировать роутеры можно через аннотации или через файлы конфигов(yaml, php, xml)
Удобнее указывать конфиги для роутеров через аннотации в контроллерах, чтобы можно было сразу в одном месте увидеть по какому роутеру используется контроллер. И при копипасте контроллера все роутинги сразу сохранятся

Как посмотреть сразу все роутинги проекта

С помощью консольной команды

Как посмотреть полную инфу о роутинге?

Нужно в команде указать url ссылку

Миграции

Описание

Миграции содержат в себе код по созданию таблиц. Позволяют вести централизованно “историю” всей БД

Создание миграций

Миграции создаются на основе существующей entity, где указываются через аннотации поля для таблицы. Команда
make:migration
Или через доктрину

СУБД зависимые миграции

Подразумевается, что наш код будет запущен только для одной СУБД с ее собственными функциями и фичами. В случае если делать кроссплатформенный код, то не получится использовать уникальный функционал для СУБД. Поэтому в кросс нет смысла

Формы

Ссылки

AbstractType для полей и целой формы

В симфони для полей формы и самой формы используется одно и тоже понятие formType. То есть поля, которое проверяет email будет называться EmailType и наследоваться от AbstractType. При этом форма для указания адреса с несколькими полями будет также наследоваться и называться с приставкой Type

Serializing данных

Сереалайзинг в API контроллере для обработки входящего json в DTO

До конца не понял что значит сериалайзинг, но в видео был пример, где в API контроллере принятый json преобразуем в DTO через сериалайзинг. То есть json повторяет структуру DTO и остается это превратить в PHP объект, для этого и используем сериалайзер

Twig

Почему не запустится никакой php код

В твиг нельзя писать никакой php, так как он парсит весь код в файлах и запускает только собственные плагины(расширения). Твиг полностью контролирует переданный код и никакие функции php ни никак не будут вызваны




Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.