Итак, я бы просто сделал это:
<?php
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
$this->serializer->serialize($object, 'json', [ObjectNormalizer::ENABLE_MAX_DEPTH => true, ObjectNormalizer::MAX_DEPTH_HANDLER => new MyMaxDepthHandler()]);
О коде внутри __invoke вы можете вернуть любые данные, которые вам нужны.Например, просто верните идентификатор связанного объекта.В некоторых случаях полезно для вывода json. Вам необходимо обновить метод __invoke следующим образом:
<?php
namespace App\Serializer;
class MyMaxDepthHandler
{
public function __invoke($innerObject, $outerObject, string $attributeName, string $format = null, array $context = []){
return $innerObject->id;
}
}
Подробное объяснение можно найти в разделе Глубина сериализации документации
Я думаю, что Serializer завершается вызовом normalize внутри, когда вы вызываете метод serialize , но дважды проверяете его.Если это не так, возможно, вызовите метод normalize напрямую, если это решение не работает.Поскольку документация предоставляет пример только с normalize