قم بإصلاح المرجع الدائري في symfony عند استخدام SerializerInterface

0

أحصل على خطأ مرجعي دائري عند إجراء تسلسل لأحد المكونات. عادة يمكن إصلاح ذلك باستخدام

$normalizer->setCircularReferenceHandler()

ومع ذلك ، أنا أستخدم واجهة المسلسل مثل:

/**
  * @Route("/get/{id}", name="get_order_by_id", methods="GET")
  */
 public function getOrderById(SerializerInterface $serializer, OrderRepository $orderRepository, $id): Response
 {
   return new Response($serializer->serialize(
     $orderRepository->find($id),
     'json',
     array('groups' => array('default')))
   );
  }

هل من الممكن إصلاح خطأ مرجعي دائري عند إجراء تسلسل باستخدام هذه الواجهة؟

2 الاجابة

3
افضل جواب

يمكنك تماما. فقط أضف هذا في تكوين الإطار الخاص بك.

framework:
    serializer:
        circular_reference_handler: App\Serializer\MyCustomCircularReferenceHandler

سيعمل هذا المعالج على مستوى العالم. تأكد من تسجيله كخدمة. لست بحاجة إلى تنفيذ أي واجهة. حتى مجرد فئة مع __invoke() سيكفي. سيتلقى هذا الاستدعاء الكائن الذي هو "دائرة مرجعية" باعتباره الوسيطة الوحيدة.

يمكنك إما إرجاع المعرف أو القيام ببعض الأشياء الرائعة حقًا ، مثل إنشاء uri للمورد. لكن تفاصيل التنفيذ متروك لك تمامًا ، طالما أنك لا تعيد نفس الشيء ، فسيكون كل شيء على ما يرام.

:)

:مؤلف
0

وفقًا لـ Symfony API Reference على الواجهة ، لا يبدو أن هناك طريقة لتنفيذ هذه الوظيفة أو استرداد المعدل.

حتى في Serializer ، لا يبدو أن هناك طريقة لاسترداد المعدل بعد إنشاء التسلسل.

من الأفضل أن تقوم بإنشاء جهاز التسوية قبل المتسلسل لتحقيق ذلك ، بدلاً من حقن الواجهة عبر ملفات التكوين. ( رابط المستندات ذات الصلة )

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام