Alexey Mishurovskiy
Всем привет
Alexey Mishurovskiy
а как сделать регистронезависимые параметры в сериалайзере ?
Юра
там вообще дибилизм
Юра
Symfony\Component\Serializer\Normalizer\ObjectNormalizer это алиас на класс который не совместим с ним
Юра
круто
Alexey Mishurovskiy
интегрируем платежку, там есть патаметр cres так он от разных банков может приходить как Cres CRes CRES и как угодно.
Vlad
Alexey Mishurovskiy
нормализер опиши свой
Так идет еще автоматическая история через ParamConverter в запросе. его как то в виже аннотация можно описать ?
Vlad
а зачем аннотация?
Vlad
контекст
Vlad
или подвязыватся на тип
Vlad
контекст
даже аттрибут есть, надо смотреть
Юра
https://github.com/symfony/symfony/issues/46471
Юра
Так что я не один такой
Павел
horse хочетсмя нормалайзер в номралайзере подключиь чтоли?
Павел
Не понял проблему в коде выше
Alexey Mishurovskiy
контекст
как его передать?
Берется аргумент из контроллера, и десериализуется. где там контекст подпихнуть ?
Alexey Mishurovskiy
я пытался схитрить с конструктором с произвольным набором аргументов.. хрен там.
Vlad
https://symfony.com/blog/new-in-symfony-5-3-inlined-serialization-context
Alexey Mishurovskiy
Павел
Например передать ключом FQN нормалайзера, и false в значении
Юра
Юра
Короче там BC из-за того что они добавили сбор данных для профайлера для сериализатора
Юра
Из-за этого алиасы ведут на Traceable... Классы, которые по типу не совпадают
Юра
Сбор можно отключить в конфиге
Юра
Тогда нормально автовайрится
Юра
На лицо архитектурная проблема
Павел
Павел
Ну ишью я почитал, да, что-то намутили)
Юра
Короче их пример в доке не пашет
Юра
Что еще сказать
Юра
Потому что вместо ObjectNormalizer прилетает другой класс
Юра
Сломали к херам автовайринг
Павел
А вообще, еще можешь прописать вручную di сервиса своего
Юра
Я отключил сбор данных
Юра
Только это помогло
Павел
У тебя же там objectNormalizer сделать альяс и собрать вручную через фабрику, что тебе необходимо
Юра
Ну я вот не собирал через фабрику
Юра
Просто инджектил интерфейс
Юра
Я написал свой денормалайзер, который принимал обджект нормалайзер чтобы в него делегировать
Юра
Раньше я наследовал от него переписал на композицию
Юра
Но и композиция сломана из-за того что он не автовайрится
Павел
Ну вариков решения куча:
Юра
И вообще в 6.2 не будет ьакого сервиса как обджек нормалайзер
Павел
1) Через фабрику собирать вручную
2) В денормалайзере не просто тип смотреть, но и еще какой нить параметр отключения
Павел
Да и вообще нефиг что то инжектить
Юра
Если инжектишь интерфейс, то получается circular reference
Павел
Павел
А еще можно не инжектить через конструктор а поставить NormalaizerAwareInterface и трейт
Павел
Ну это так)
Юра
Будет такая же circular reference наверное
Павел
Павел
Первый цикл залетает в денормалайзер, а в самом деномрлайзере десериализуешь с дополнительным параметром в контексте
Павел
а в суппорте денормалайзера проверяешь не только тип но и параметр
Юра
А где почитать про этот интферфейс?
Павел
\Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface
Павел
\Symfony\Component\Serializer\SerializerAwareInterface
Павел
Когда сериализатор собирает свои номралайзеры, он проверяет на эти интерфейсы и сует в них себя.
Павел
Это просто чтобы вручную в конструкторе не прописывать
Павел
И получается в контроллере делаешь $serializer->denormalize(..), а в кастомном денормализторе делаешь $this->serializer->denormalize(.., ..., $context= [self::class => false])
Павел
Ну а в саппорт проверяешь эту переменную контекста что она не false
Юра
только в сапортс нет контектса )
Павел
Юра
а есть
Юра
public function supportsDenormalization(mixed $data, string $type, string $format = null /* , array $context = [] */);
Юра
закоменченый
Юра
)
Юра
ну билилы
Юра
а твой варинат был хорош я уже почти сделал
Павел
Павел
5.4
Павел
А блин
Павел
это не суппорт) ща )) я где то делал же
Юра
Павел
Хм...