Новое в Symfony 4.3: Автоматическая валидация

Рассмотрим следующую сущность Doctrine:

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Entity */
class SomeEntity
{
    // ...

    /** @ORM\Column(length=4) */
    public $pinCode;
}

Приведет ли следующий код к ошибке проверки?

$entity = new SomeEntity();
$entity->pinCode = '1234567890';
$violationList = $validator->validate($entity);

Ответ – нет. Удивительно, но многие разработчики Symfony все еще не осознают, что конфигурация отображения Doctrine (например, @ORM\Column (length = 4)) на самом деле ничего не проверяет. Этот конфиг — просто подсказка для генератора схемы Doctrine. Это может привести к юзабилити и даже проблемам безопасности.

В Symfony 4.3 улучшили это, введя автоматическую проверку, основанную на отображении Doctrine. Вот почему в Symfony 4.3 предыдущий пример дал бы следующий результат:

$violationList = $validator->validate($entity);

var_dump((string) $violationList);
// Object(App\Entity\SomeEntity).columnLength:\n
//     This value is too long. It should have 4 characters or less.
//     (code d94b19cc-114f-4f44-9cc4-4138e80a87b9)\n

Эта новая функция анализирует сопоставления, такие как @ORM\Column(length=4), чтобы автоматически добавлять связанную проверку @Assert\Length(max=4) к тому же свойству. В частности, следующие проверки автоматизированы:

Doctrine mapping
Automatic validation constraint
nullable=false@Assert\NotNull
type=...@Assert\Type(...)
unique=true@UniqueEntity
length=...@Assert\Length(...)

Для автоматической проверки nullable=false и type=... необходимо установить компонент PropertyInfo. Кроме того, эта новая функция будет отключена по умолчанию, но включена для новых проектов.

Поскольку компонент Form, а также платформа API для внутреннего использования используют компонент Validator, все ваши формы и WEB-API также автоматически получат выгоду от этих автоматических ограничений.

И наконец, имейте в виду, что хотя эта автоматическая проверка удобна, ее недостаточно для большинства приложений, поэтому вам все равно придется вручную настроить дополнительные ограничения проверки Symfony.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *