Начнём с того, что Симфони ссанина ёбаная и я её рот ебал! Ни дня без какой-либо хуйни не обходится! Создаёт проблемы на ровном месте. И вот на этот раз эта ебалайка пишет мне: 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 строки делают то, что ты от них и ожидаешь! Однако, не всё так просто, зацените какая хуйня ожидает вас дальше.