سؤال

أحاول اعتراض وحدة تحكم تقوم بإرجاع كائن JSON Magento\Framework\Controller\Result\Json فصل.تكمن المشكلة في أنه بغض النظر عما إذا كنت أستخدم مكونًا إضافيًا أو تفضيلًا "لالتقاط" استجابة وحدة التحكم مباشرة بعد إنشائها للقيام بما أريد بها، فإنني دائمًا ما ينتهي بي الأمر بهذا Json الكائن، وطريقته العامة الوحيدة الموروثة منه Magento\Framework\Controller\AbstractResult هل renderResult الطريقة (بصرف النظر عن بعض أدوات الضبط، والتي لن تساعدني على الإطلاق). سلسلة JSON هي أيضًا خاصية محمية، لذا لا يمكنني الوصول إليها مباشرة.

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

أنا أستخدم فرع التطوير.لقد استندت في الكود الخاص بي إلى التزام 0be91a5 (طلب سحب الدمج رقم 14 من magento-vanilla/PR)، لكنني تحققت من الالتزام الأخير (حاليًا هو 74f9337 طلب سحب الدمج رقم 81 من magento-firedrakes/MAGETWO-44741) ولا يوجد التغييرات في Json و AbstractResult الطبقات.

هل كانت مفيدة؟

المحلول

يحتوي Class \Magento\Framework\Controller esult\Json على طريقتين عامتين للتعامل مع البيانات.يمكنك إضافة مكون إضافي إلى أساليبهم لتعديل البيانات ذات الصلة بـ json:

class \MyVendor\MyModule\Controller\Result\JsonPlugin {
   public function beforeSetData($subject, $data, $cycleCheck = false, $options = []) 
   {
       return [ 'data' => $data, 'metadata' => 'sdsd'];
   }
   public function beforeSetJsonData($subject, $jsonData)
   {  
        return '{"data": ' . $jsonData . , ', "metadata": []}';
   }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top