Улучшенные сообщения об ошибках PropertyAccess
Большие сообщения об ошибках необходимы, чтобы избежать разочарования при использовании любого программного обеспечения. В Symfony 4.4 улучшили сообщения об ошибках, генерируемые PropertyAccess
, при попытке найти доступное для записи свойство.
Например, когда вы уже определили методы сумматора/удаления, но их подпись была неправильной (например, addFoo()
/removeFoo()
), это было отображено с ошибкой:
Neither the property "foo" nor one of the methods "addFoo()/removeFoo()", "setFoo()", "foo()", "__set()" or "__call()" exist and have public access.
Сообщение об ошибке теперь гораздо понятнее:
The method "removeFoo()" requires at least "1" parameter, "0" found.
Это только один пример, но улучшили множество других сообщений об ошибках в этом компоненте.
Поддержка *:only-of-type CSS-селекторы
Компонент CssSelector, который косвенно используется в функциональных тестах для выбора элементов на основе селекторов CSS, поддерживал псевдокласс: only-of-type при указании HTML-элемента (например, p: only-of-type выбирает дочерний элемент, только если он единственный абзац внутри элемента).
В Symfony 4.4 мы также добавили поддержку *:only-of-type
(или just:only-of-type
), которая выбирает отдельные дочерние элементы. Если элемент имеет 2 <p> и 1 <a> в качестве дочерних, то выбирается только <a>, но если он имеет 1 <p> и 1 <a>, выбираются оба, потому что они единственные в своем типе.
Использование свойства как значения диапазона
Ограничение Range проверяет, что данный номер или объект DateTime
находится между некоторым минимумом и максимумом. В Symfony 4.4, благодаря новым параметрам maxPropertyPath
и minPropertyPath
, вы можете использовать значения, сохраненные в некоторых свойствах, в качестве значений этих минимум/максимум:
// src/Entity/Event.php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Event
{
/**
* @Assert\Range(
* minPropertyPath = "startsAt",
* maxPropertyPath = "endsAt"
* )
*/
private $registrationDate;
private $startsAt;
private $endsAt;
// ...
}
Сортировать переводов
Команда translation:update
поможет вам извлечь переводимое содержимое из шаблонов Twig и контроллеров PHP. В Symfony 4.4 добавили новую опцию --sort
для сортировки списка сообщений по алфавиту (asc или desc):
php bin/console translation:update --force --sort=asc fr
Считать пустые строки недействительными
Должна ли пустая строка считаться действительной или недействительной в ограничении длины? Ответ не так очевиден, как может показаться на первый взгляд. В Symfony 4.4 пытались улучшить и упростить это поведение с помощью новой опции allowEmptyString
.
В Symfony 4.4 новая опция по умолчанию имеет значение true
, чтобы сохранить совместимость с существующим поведением. Однако не рекомендуется явно определять значение для этой опции, поэтому вы увидите несколько журналов устаревания, связанных с этим. Пришлось отказаться от установки этого параметра, чтобы могли изменить значение по умолчанию на false
в Symfony 5.0.
Добавлен .gitattributes для удаления тестов
Специальный файл .gitattributes
позволяет определять атрибуты для разных путей (каталогов или файлов) в проекте Git (например, изменять символы конца строки или определять, как должен вычисляться diff).
Одним из этих атрибутов является export-ignore
, который делает файл или каталог исключаемым при создании архивов Git. Эти архивы используются при установке зависимостей с обновлением composer --prefer-dist
(установка их с обновлением composer --prefer-source
ничего не исключает).
Учитывая, что компоненты Symfony включают в себя тонну тестовых файлов, и учитывая, что большинству людей тесты не нужны в работе, некоторые из сообщества предложили удалить все тестовые файлы с помощью export-ignore
. Эти обсуждения начались в 2014 году и с тех пор стали постоянным спросом. В Symfony 4.4 наконец решили добавить эти файлы .gitattributes
.
В результате при установке зависимостей с помощью флага --prefer-dist
вы больше не будете получать тесты Symfony, которые могут сэкономить до 50% размера установки (несколько мегабайт на установку). Это поможет вам создавать пакеты меньшего размера при развертывании с помощью Docker или без сервера.