تجاوز وحدة التحكم الأساسية في Pimcore
لقد كنت أعمل في مشروع Pimcore منذ بعض الوقت، ولم أتطرق مطلقًا إلى PHP وSymfony في حياتي، لذلك كان ذلك تحديًا كبيرًا.
التوثيق رائع، أعني، إنه رائع حقًا، ولكن يبدو أنه ليس مخصصًا للمبتدئين في اللغة/إطار العمل، لذا كل ما قمت به كان علي أن أقوم بتدوين ملاحظات عنه.
بعد أن تعلمت أنه يمكنك توسيع Pimcore باستخدام الحزم، قضيت ساعات وساعات في محاولة لتجاوز وحدات التحكم وطرق جافا سكريبت والمزيد من الأشياء.
لذا سأشرح في هذا المنشور كيف تمكنت من تجاوز وحدة التحكم. كيفية تجاوز ملفات جافا سكريبت ستأتي لاحقًا 😉.
إنشاء الحزمة
أولاً، نحتاج إلى إنشاء حزمة لها، الأمر بسيط جدًا كما هو موثق في وثائق Pimcore، نحتاج فقط إلى تشغيل bin/console pimcore:generate:bundle --namespace=EmiDemo/EmiDemoBundle في مجلد المشروع.
سوف يطرح بعض الأسئلة ولكن لا شيء يدعو للقلق.

سيتم إنشاء مجلد جديد ضمن المجلد src بمساحة الاسم التي أعلناها من قبل، وفي الداخل سيكون لدينا جميع الملفات الضرورية للحزمة.

أيضًا، سيتم اكتشاف المكون الإضافي من خلال موقع إدارة Pimcore، ولكن سيتم تعطيله، يجب عليك تمكينه لبدء استخدامه.

تجاوز الطريقة من وحدة التحكم
لتجاوز طريقة ما في وحدة التحكم، من الواضح أنك تحتاج أولاً إلى العثور على الإجراء الذي تريد تحديثه، يبدو هذا سهلاً ولكني سأعطيك الطريقة التي أفعلها عادةً (تعلمت من زميلي في الفريق سيزار).
انتقل أولاً إلى الصفحة التي تعتقد أن وحدة التحكم تتخذ إجراءً، وفي حالتي أريد التحقق من الصفحة التي يتم تحميلها عندما نفتح أحد الأصول
بعد ذلك، ما عليك سوى فتح وحدة التحكم والانتقال إلى علامة تبويب الشبكة، وإجراء نفس الخطوات مرة أخرى ومحاولة العثور على الإجراء
باستخدام هذه المعلومات، يمكنك أن ترى أن الإجراء الذي يقوم بتحميل الأصل هو http://localhost/admin/asset/get-data-by-id?_dc=1607601778450&id=2&type=image. من ذلك يمكننا أن نرى أن إجراء وحدة التحكم هو get-data-by-id.
ابحث عن الإجراء في وحدة التحكم الأساسية
بالنسبة لي، فإن أبسط طريقة للقيام بذلك هي العثور على جميع الملفات في Visual Studio Code
من المحتمل أن تجد أكثر من واحد لذا يجب عليك إلقاء نظرة وتحديد أي منها هو، في حالتنا نحن نعمل مع الأصول لذا فمن الواضح أننا نريد استخدام AssetController.php.
تعديل وحدة التحكم الأساسية
يعتمد الأمر على المطور، وأنا لا أفعل ذلك عادةً لأنه من الأسرع تجاوز وحدة التحكم والتطور من هناك. لكنني أوصي أولاً بتحديث وحدة التحكم في الحزمة الأساسية لمعرفة ما إذا كانت التغييرات التي أجريتها تعمل أم لا.
في حالتنا، سأقوم فقط بإرجاع رسالة في بداية الطريقة للتأكد من أنها تعمل.
return $this->adminJson(['success' => false, 'message' => "Overriding the getDataByIdAction in the core!!"]);
ثم دعونا نعيد تحميل أصولنا ونتحقق من علامة تبويب الشبكة
دعونا نحتفظ بما لدينا هناك، حتى نعلم لاحقًا أننا نستخدم رسالة الحزمة بدلاً من الرسالة الأساسية.
الآن دعنا ننسخ ذلك إلى ملف مؤقت لتتبع ما فعلناه.
انقل هذه التغييرات إلى الحزمة
الآن، لنتمكن من نقل هذه التغييرات إلى مجموعتنا، لكننا نحتاج أولاً إلى بعض العناصر من وحدة التحكم الأساسية لدينا:
- مساحة الاسم
- الواردات
- اسم وحدة التحكم
ومن الواضح أن الطريقة getDataByIdAction هي الطريقة التي نريد تجاوزها.
فضح وحدة التحكم
نحتاج إلى الكشف عن وحدة التحكم، وللقيام بذلك، عليك الانتقال إلى الملف /src/EmiDemo/EmiDemoBundle/Resources/config/pimcore/routing.yml وإضافة
options:
expose: true
نحتاج أيضًا إلى تغيير prefix إلى الذي سنتجاوزه، في حالتنا، وحدة التحكم admin.
لذلك في النهاية سوف تبدو مثل هذا
emi_demo_emi_demo:
resource: "@EmiDemoEmiDemoBundle/Controller/"
type: annotation
prefix: /admin
options:
expose: true
DefaultController.php
في ملفنا، سنقوم بإضافة الواردات وتوسيع وحدة التحكم مع تلك التي سنتجاوزها
بعد ذلك سنقوم فقط بنسخ الطريقة من وحدة التحكم الأساسية، وفي حالتنا، نقوم بتحديث الرسالة التي نعيدها.
إذا كنت تتذكر، لدينا رسالة في وحدة التحكم الأساسية بالفعل: Overriding the getDataByIdAction in the core!! والآن يجب أن نرى Overriding the getDataByIdAction in the bundle!!
دعونا لا نعيد أي شيء ونرى أنه يمكننا الآن رؤية الصفحة كما كانت من قبل
قم بالتعليق على بيان الإرجاع وأعد التحميل
هذا كل شيء
ومن خلال هذا العرض التوضيحي الصغير، يمكنك معرفة مدى سهولة تجاوز وحدة التحكم الأساسية الموجودة في Pimcore. هناك بعض الخطوات التي عليك اتباعها ولكنها ليست صعبة. فقط تأكد من كشف وحدة التحكم ومسح ذاكرة التخزين المؤقت من وقت لآخر أثناء إجراء التغييرات، وفي بعض الأحيان يتم تخزينها مؤقتًا وتظل عالقًا معتقدًا أنها لا تعمل وأنها مخزنة مؤقتًا فقط.
إذا كنت تتساءل عن كيفية تجاوز ملفات جافا سكريبت، فسوف يأتي في برنامج تعليمي آخر 😁.









