Вы правы в предположении, что дополнительный вызов конструктора копирования происходит из внутренней реструктуризации вектора.
Подробнее см. в этом ответе: https://stackoverflow.com/a / 10368636/3708904
Или этот ответ по причине необходимости создания копии: https://stackoverflow.com/a/11166959/3708904
Вы полностью можете. Просто добавьте это в свой конфигурационный файл.
framework:
serializer:
circular_reference_handler: App\Serializer\MyCustomCircularReferenceHandler
Этот обработчик будет работать глобально. Убедитесь, что вы зарегистрировали его как услугу. Мне не нужно реализовывать какой-либо интерфейс. Так что достаточно класса с __invoke()
. Этот вызов получит объект, который является «окружным референсом» как единственный аргумент.
Вы можете либо вернуть id, либо сделать действительно классные вещи, например, создать uri для ресурса. Но детали реализации полностью зависят от вас, если вы не вернете один и тот же объект, все будет хорошо.
:)
В соответствии с API-интерфейсом Symfony API на интерфейсе не существует способа выполнить эту функцию или получить нормализатор.
Даже в Сериализатор не ищет способ получить нормализатор после создания сериализатора.
Лучше всего создавать нормализатор перед сериализатором для достижения этого, вместо того, чтобы вводить интерфейс через файлы конфигурации. ( Ссылка на соответствующие документы )