Начнём с того, что Симфони ссанина ёбаная и я её рот ебал! Ни дня без какой-либо хуйни не обходится! Создаёт проблемы на ровном месте. И вот на этот раз эта ебалайка пишет мне: A circular reference has been detected when serializing the object of class (configured limit: 1). А я в рот не ебу что этой паскуде нужно. Но деваться некуда, нужно избавляться от этого недоразумения.

Итак, мне удалось найти два способа решения этой проблемы и один просто охуительнее другого. Первый способ предложил какой-то хуесос на стековерфло. Этот пидрила спизданул, что нужно прокачать нормалайзер. Анус себе прокачай, паскуда, тварь!

Вобщем ищите в своём говнокоде что-то подобное:

$serializer = new Serializer($normalizers, $encoders);

Теперь нужно к нормалайзерам добавить коллбэк методом setCircularReferenceHandler:

$normalizers = [(new CustomObjectNormalizer())->setCircularReferenceHandler(function ($object) {
            return $object->getId();
        })];

Всё. Однако, есть побочный эффект, из нихуя будут появляться какие-то блядские данные. Например, вместо времени в datatime поле эта ссанина выведет целый блядь ёбаный объект! Симфони,какого хуя, сука?

"createdAt": {
                    "timezone": {
                        "name": "UTC",
                        "transitions": [
                            {
                                "ts": -9223372036854775808,
                                "time": "-292277022657-01-27T08:29:52+0000",
                                "offset": 0,
                                "isdst": false,
                                "abbr": "UTC"
                            }
                        ],
                        "location": {
                            "country_code": "??",
                            "latitude": 0,
                            "longitude": 0,
                            "comments": "?"
                        }
                    },
                    "offset": 0,
                    "timestamp": 1533383595
                },

Ещё один пиздец в том, что этот недофреймворк сам по своему усмотению конвертирует имена полей с подчёркиванием в camelCase. Я тебя просил, уёбощная ты Symfony? Нахуя мне createdAt вместо каноничного created_at? И как же быть, как заставить эту поделку работать так, как ты от неё этого ожидаешь?

Всё просто. нужно заюзать сериалайзер так:

$serializer = SerializerBuilder::create()->build();
$data = $serializer->toArray($entity);

И всё, блядь, красотища, всего 2 строки делают то, что ты от них и ожидаешь! Однако, не всё так просто, зацените какая хуйня ожидает вас дальше.

2 Comments

shwarmacode · 2018-08-08 at 01:35

Жизненно. Держись, братан!

Zidane · 2019-05-28 at 16:30

Автор, перестань заниматься хуйнёй

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

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

Любишь мемасики?

Подпишись на мой телеграм-канал!

Открыть
Закрыть