Исключить ресурсы из конфигурации маршрутизации
При настройке сервисов в Symfony вы можете исключить шаблоны файлов/каталогов, которые не следует превращать в службы. В Symfony 4.4 добавили аналогичную функцию, чтобы вы могли исключить шаблоны из конфигурации маршрутизации:
# config/routes/annotations.yaml
controllers:
resource: ../../src/Controller/*
type: annotation
# annotations won't be loaded for the following patterns
exclude: '../src/Controller/{DebugEmailController}.php'
Нормализовать пробелы в элементах HTML
В функциональных тестах обычно получают значение узлов HTML и сравнивают его с некоторым ожидаемым значением. При этом Symfony возвращает точное исходное содержимое узла, включая все пробелы и новые строки. Вот почему вы, вероятно, вызываете trim()
перед сравнением значений:
$this->assertSame(
'Hello World',
trim($crawler->filter('section#content h1.title')->text())
);
Учитывая, что спецификации DOM и WebDriver говорят браузерам всегда возвращать нормализованное содержимое без пробелов, решили сделать то же самое, начиная с Symfony 5.0.
Между тем, в Symfony 4.4 добавили необязательный второй аргумент в метод text()
. Если true
, содержимое нормализуется. Его значение по умолчанию — false
, чтобы сохранить обратную совместимость, но вы увидите сообщение об устаревании, если вы не установите этот аргумент явно, а содержимое содержит пробелы:
$this->assertSame(
'Hello World',
$crawler->filter('section#content h1.title')->text(null, true)
);
Поддержка научного формата чисел
Компонент ExpressionLanguage предоставляет богатый синтаксис для создания всевозможных выражений, используемых для служб, безопасности, маршрутизации или для определения ваших собственных бизнес-правил. В Symfony 4.4 улучшили синтаксис с поддержкой экспоненциальной или научной записи чисел (например, 1.99E + 3 или 1e-2).
Устаревшие множественная проверка в isGranted()
Метод isGranted()
, предоставленный AuthorizationChecker
, позволяет проверить, имеет ли текущий пользователь данное разрешение. Хотя этот метод обычно не используется, он также позволяет передавать более одного разрешения. Например, внутри контроллера, выходящего из Symfony’s AbstractController
:
if ($this->isGranted(['ROLE_USER', 'ROLE_ADMIN'])) {
// ...
}
Какие роли необходимы для пользователя? Оба или только один из них? Ответ… просто любой из них. Тем не менее, это сбивает с толку, и поэтому это стало устаревшим в Symfony 4.4. Начиная с Symfony 5.0, вы можете передать только одно разрешение isGranted()
. Если вам нужно проверить несколько разрешений, используйте любую из следующих альтернатив:
if ($this->isGranted('ROLE_USER') || $this->isGranted('ROLE_ADMIN'))) { ... }
if ($this->isGranted('ROLE_USER') && $this->isGranted('ROLE_ADMIN'))) { ... }
if ($this->isGranted(new Expression("is_granted('ROLE_USER') or is_granted('ROLE_ADMIN')"))) { ... }
if ($this->isGranted(new Expression("is_granted('ROLE_USER') and is_granted('ROLE_ADMIN')"))) { ... }
Улучшена команда lint: twig
Команда lint:twig
— это одна из команд linter
, предоставляемая Symfony для проверки того, что ваше приложение готово к работе. В Symfony 4.4 улучшили его с помощью новой опции — --show-deprecations
$ php bin/console lint:twig --show-deprecations ERROR in symfony-demo/templates/base.html.twig (line 22) 21 | * 22 | {% block header %}{% spaceless %} The "spaceless" tag at line 22 is deprecated since Twig 2.7, use the spaceless filter instead.