Alexey Mishurovskiy
Всем привет
Alexey Mishurovskiy
а как сделать регистронезависимые параметры в сериалайзере ?
Юра
там вообще дибилизм
Юра
Symfony\Component\Serializer\Normalizer\ObjectNormalizer это алиас на класс который не совместим с ним
Юра
круто
Alexey Mishurovskiy
интегрируем платежку, там есть патаметр cres так он от разных банков может приходить как Cres CRes CRES и как угодно.
Alexey Mishurovskiy
нормализер опиши свой
Так идет еще автоматическая история через ParamConverter в запросе. его как то в виже аннотация можно описать ?
Vlad
а зачем аннотация?
Alexey Mishurovskiy
а зачем аннотация?
А как ? это частный случай
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
https://symfony.com/blog/new-in-symfony-5-3-inlined-serialization-context
А, спасибо. искал не правильнол
Павел
затем что мне надо вызвать дефолтный если мой не подходит
Вообще object проще через new собрать. Или через контекст что-нить намутить. Типо чтобы твой нормалайзер не включался при каких нить переменных контекста
Павел
Например передать ключом FQN нормалайзера, и false в значении
Юра
Короче там BC из-за того что они добавили сбор данных для профайлера для сериализатора
Юра
Из-за этого алиасы ведут на Traceable... Классы, которые по типу не совпадают
Юра
Сбор можно отключить в конфиге
Юра
Тогда нормально автовайрится
Юра
На лицо архитектурная проблема
Павел
Павел
Ну ишью я почитал, да, что-то намутили)
Юра
Короче их пример в доке не пашет
Юра
Что еще сказать
Юра
Потому что вместо ObjectNormalizer прилетает другой класс
Юра
Сломали к херам автовайринг
Павел
Потому что вместо ObjectNormalizer прилетает другой класс
Там кстати в ишью есть решение, скорее всего видел, так как сам его скинул)
Павел
А вообще, еще можешь прописать вручную di сервиса своего
Юра
Я отключил сбор данных
Юра
Только это помогло
Павел
У тебя же там objectNormalizer сделать альяс и собрать вручную через фабрику, что тебе необходимо
Юра
Ну я вот не собирал через фабрику
Юра
Просто инджектил интерфейс
Павел
Просто инджектил интерфейс
Ну ObjectNormalaizer не интерфейс
Юра
Я написал свой денормалайзер, который принимал обджект нормалайзер чтобы в него делегировать
Юра
Раньше я наследовал от него переписал на композицию
Юра
Но и композиция сломана из-за того что он не автовайрится
Павел
Ну вариков решения куча:
Юра
И вообще в 6.2 не будет ьакого сервиса как обджек нормалайзер
Павел
1) Через фабрику собирать вручную 2) В денормалайзере не просто тип смотреть, но и еще какой нить параметр отключения
Павел
Да и вообще нефиг что то инжектить
Юра
Если инжектишь интерфейс, то получается circular reference
Павел
А еще можно не инжектить через конструктор а поставить NormalaizerAwareInterface и трейт
Павел
Ну это так)
Юра
Будет такая же circular reference наверное
Павел
Будет такая же 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
Павел
А блин
Павел
это не суппорт) ща )) я где то делал же
Юра
Павел
Хм...