ما هي الفئات "قادرة على الاعتراض/المكونات الإضافية" في Magento 2

magento.stackexchange https://magento.stackexchange.com//questions/69554

سؤال

تاريخ:30 مايو 2015 (نظرًا للطبيعة المتغيرة لـ Magento 2).

تم تقديم ماجنتو 2 مفهوم البرنامج المساعد, ، مُنفّذ عبر نمط اعتراضي.

ما هو غير واضح من المستندات هو - ما هي الفئات والكائنات في Magento "القابلة للاعتراض"؟أي أنك تقوم بتكوين مكون إضافي باستخدام XML يبدو كما يلي

<config>
    <type name="{ObservedType}">
        <plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="true"/>
    </type>
</config>

ولكن ليس من الواضح ما هي الفئات الصالحة باعتبارها ObservedType.هذا مقالة ويكي قديمة يوفر بعض القرائن عندما يقول

يرجى ملاحظة أن ميزة البرنامج المساعد لا تنطبق على -الفئات التي تم إنشاؤها دون حقن التبعية ، أي ، تم إنشاؤها مع المشغل الجديد مباشرة ، طرق ، فئات نهائية

يكون أي الكائن الذي تم إنشاؤه عن طريق حقن التبعية متاح ليتم اعتراضه؟هل ObservedType يجب أن يكون نوع التلميح المقدم في a __construct الطريقة، أو يمكن (ينبغي؟) أن يكون شيئا آخر؟

أحاول بشكل أساسي فهم ما يمكن وما لا يمكن فعله باستخدام أداة اعتراض Magento 2 قبل أن أبدأ في استخدامها.

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

المحلول

كل فئة من وحدات Magento قابلة للتبادل.

كما هو موضح في الويكي الحالي، فهو محدود بالطرق والفئات النهائية

لم يتم التحقق من صحتها، ولكن لا يُسمح باعتراض فئات المكتبات (دليل lib).

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

نصائح أخرى

نحن نعمل على التعليقات التوضيحية "@api" للتعليق عليها مُستَحسَن الأساليب التي ستكون أكثر استقرارًا عبر الإصدارات.إذا كنت تقلق بشأن إمكانية الترقية، بالإضافة إلى ماذا يستطيع لديك مكون إضافي محدد، يجب عليك أيضًا التفكير في ما يجب لديك البرنامج المساعد المحدد.لا ننصح باعتراض الطرق غير @api، ولكننا نعلم أحيانًا أن هذا قد يكون الخيار الأفضل.(نترك ذلك لتقدير المطور.)

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

أعلم أن هذا لديه إجابة بالفعل، لكنه منذ عامين.ربما تغيرت بعض الأشياء في هذه الأثناء.

وهنا ما وجدته حتى الآن.
من الوثائق الرسمية ومن الحفر في عملية الاعتراض.

سأجيب في الاتجاه المعاكس.
ماذا لا تستطيع سيتم اعتراضها في Magento 2.
من الوثيقة الرسمية

  • الكائنات التي تم إنشاء مثيل لها قبل تمهيد Magento\Framework\Interception (لست متأكدًا من مكان هذه النقطة)
  • الطرق النهائية
  • أي طريقة من الفئات النهائية (لأن فئة المعترض التي تم إنشاؤها يجب أن توسع الفئة الأصلية)
  • أي فئة تحتوي على طريقة عامة نهائية واحدة على الأقل
  • الأساليب غير العامة (يمكن أن تعمل مع الأساليب المحمية ولكن هذا ليس "أخلاقيًا" لأنه قد يعرض الأساليب غير العامة لخارج الفصل)
  • أساليب ثابتة
  • __بناء
  • الأنواع الافتراضية

من الحفر حولها

  • الأساليب في الفئات التي لم يتم إنشاء مثيل لها عبر مدير الكائنات.(مثال \Magento\Framework\Phrase)
  • تنفيذ الفصول \Magento\Framework\ObjectManager\NoninterceptableInterface.(على سبيل المثال \Magento\Framework\App\Cache\Proxy وجميع الوكلاء الآخرين الذين تم إنشاؤهم تلقائيًا)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top