Size: a a a

2021 September 24

АЯ

Андрей Ява in symfony
зависит от философии архитектуры и от того, что ты считаешь объектами
источник

АЛ

Александр Латухин... in symfony
Привет.

Хотел бы поинтересоваться как вы обходите ошибки: "Typed property must not be accessed before initialization"

Предположим у нас есть некий DTO

class DTO {
public int $value;
public int $value2:
}

К нам приходит запрос например с такими данными: { "value2": 150}

Сериалайзер конвертнер json в dto, валидатор его провалидирует успешно.

Что я хочу ? - Я хочу фронту сказать пожалуйста заполни мне переменную $value;

На текущий момент можно навесить @Assert\NotBlank и сделать свойство
public ?int $value = null
 - но мне этот вариант не подходит.


Можно через рефлексию посмотреть что свойство не проинициазировано и выкинуть ошибку фронту, вопрос где это лучше сделать и можно ли на уровне загрузки мета данных валидатора например по интерфейсу определить дто и на них где-то навесить свое ограничение
источник

А

Антон in symfony
Вроде как вмержили https://github.com/symfony/symfony/pull/42502. Должно помочь.
источник

АЛ

Александр Латухин... in symfony
спасибо, надо обновляться, сами еще на 4-ке сидим, буду смотреть
источник

D

Dmitry in symfony
это не то
источник

D

Dmitry in symfony
они вмержили ошибки при преобразовании типов
источник

D

Dmitry in symfony
а у вас проблема required
источник

А

Антон in symfony
Это то. Если он десереализует массив в dto без nullable св-в, то еще до валидации сможет вернуть ошибки корректно на фронт. А дальше валидатор будет работать со всеми замапленными св-вами и ошибки доступа к неинициализированнму св-ву не будет.
источник

D

Dmitry in symfony
Add support for collecting type error during denormalization - это в мерже
Typed property must not be accessed before initialization - это ошибка у автора
источник

D

Dmitry in symfony
мерже помогате ловить ошибки когда пришел не тот тип переменной в джсоне
источник

D

Dmitry in symfony
а у автора проблема когда поле не пришло в принципе
источник

D

Dmitry in symfony
думается мне автору поможет вот этот кусок больше
https://symfony.com/doc/current/validation/raw_values.html
источник

D

Dmitry in symfony
джсон можно преобразовать в массив и уже там накинуть Required
источник

АЛ

Александр Латухин... in symfony
На текущий момент преобразованиями занимается сериалайзер.

Сделал 2 валидации.
1. Проверяет объект и инициализированные свойства (Если какое-то поле не передано, то смысла идти на шаг 2 нет)
2. Уже проверяет бизнесовые ограничения

Думал, как-то можно навесить свое ограничение на объекты (Которые реализуют некий интерфейс) например когда мы получаем мето-данные самого класса
источник

D

Dmitry in symfony
может тогда сделать кастомный валидатор констрейт ?
источник

D

Dmitry in symfony
и будете навешивать по аналогии с @Assert\NotBlank
@Assert\CustomContraintCheckExistance
источник

АЛ

Александр Латухин... in symfony
Так и сделал, только навесил не на свойство, а на целый класс
источник

D

Dmitry in symfony
а хотя не поможет, валидаторы вступают в работу уже после сериализатора
источник

D

Dmitry in symfony
тогда попробуйте заюзать пакеты валидации json
источник

D

Dmitry in symfony
источник