คำถามติดแท็ก plugin

หมายถึงคำถามเกี่ยวกับ Magento 2 Plugins (BeforePlugin, AfterPlugin และ AroundPlugin) ปลั๊กอินเรียกอีกอย่างว่า interceptors ในเอกสาร Magento

3
Magento 2: ปลั๊กอินก่อน / หลัง / หลังการโต้ตอบ
ใน Magento 2 เมื่อคุณสร้างปลั๊กอิน "รอบ" public function aroundRenderResult( \Magento\Framework\Controller\ResultInterface $subject, \Closure $proceed, ResponseHttp $response ) { //... $proceed($response); //... } คุณสามารถดำเนินการต่อไปปลั๊กอินรอบต่อไปปิดท้ายด้วยการเรียกวิธีการเดิมที่เกิดขึ้นจริงโดยการเรียก / อัญเชิญผ่านใน$proceedวิธีการ นี่เป็นรูปแบบการออกแบบทั่วไปที่มักพบในการใช้มิดเดิลแวร์ PHP Frameworks อย่างไรก็ตาม - มันนำเสนอความสับสนโดยไม่มีข้อมูลการใช้งาน เฉพาะ หากนอกเหนือไปจากaroundPluginวัตถุ / คลาสยังมีการกำหนดbeforeหรือafterปลั๊กอินเมื่อใดพวกมันจะเริ่มสัมพันธ์กับสายโซ่ของปลั๊กอิน คือวิธีทั้งหมดก่อนที่จะยิงก่อนที่จะมีวิธีการใด ๆ ไฟปลั๊กอิน? หรือก่อนที่ปลั๊กอินจะยิงก่อนที่ไฟสุดท้ายจะเกิดขึ้นจริงหรือไม่ ปัญหาเฉพาะฉันพยายามที่จะติดตามลงคือผมไม่สามารถดูเหมือนจะได้รับปลั๊กอินที่ติดอยู่กับวิธีการจัดส่งที่ควบคุมวีโอไอพี 2 หน้าเมื่อวีโอไอพีในโหมดแคชเต็มหน้า แคชเต็มหน้าดำเนินการโดยปลั๊กอินรอบ ๆ ที่ไม่ได้$proceed($response)โทร ฉันได้ลองขุดลงในโค้ดบางส่วนรอบ ๆ ปลั๊กอินเหล่านี้และพบว่าระบบนั้นยากที่จะให้เหตุผลโดยไม่ทราบว่าปลั๊กอินนั้นทำงานอย่างไร ie - คำอธิบายในหน้าเอกสาร devจะปรากฏขึ้นในอินสแตนซ์ที่เฉพาะเจาะจงนี้อันใดอันหนึ่งที่ไม่ถูกต้อง …

5
การเรียนรู้การพัฒนาปลั๊กอิน Magento
ฉันเป็นนักพัฒนา PHP มานานกว่า 13 ปีมีความรู้กว้างขวางเกี่ยวกับ PHP ตราบเท่าที่โครงการยอดนิยมอื่น ๆ เช่น WordPress ฉันไม่มีประสบการณ์กับ Magento ตอนนี้ฉันมีงานเต็มเวลาทำงานให้กับ บริษัท ที่ใช้ Magento งานพัฒนาของฉันทั้งหมดจะอยู่ที่ Magento ในตอนนี้ ความคิดเริ่มแรกของฉันหลังจากดู Magento เป็นครั้งแรกว้าวฉันได้อะไรลงไปบ้าง? แต่แล้วนักพัฒนาที่มีประสบการณ์ในตัวฉันก็ออกมาและจำได้ว่ามันเป็นแค่ PHP ดังนั้นฉันจึงมีคำถามพื้นฐานเกี่ยวกับคุณภาพเยี่ยมฉันขอขอบคุณคำตอบจากนักพัฒนา Magento ที่มีประสบการณ์มากกว่า ... สถานที่ที่มีประโยชน์ที่สุดในการเรียนรู้เกี่ยวกับการพัฒนาวีโอไอพีข้างเว็บไซต์นี้คืออะไร ส่วนขยาย / ปลั๊กอินทำให้ฉันสับสนมากจนถึงตอนนี้ แพลตฟอร์มอื่น ๆ เช่น WordPress ช่วยให้คุณวางปลั๊กอินลงในโฟลเดอร์ของตัวเองและไฟล์ทั้งหมดจะอยู่ภายใต้โฟลเดอร์นั้น จากสิ่งที่ฉันได้เห็นจนถึงตอนนี้ปลั๊กอินอาจกระจัดกระจายไปทั่วหลายโฟลเดอร์ใน Magento นี่ถูกต้องหรือไม่ ฉันได้เรียนรู้เกี่ยวกับวิธีการใช้งานฟังก์ชั่นการทำงานของ Core มากขึ้น ดังนั้นหากไฟล์ในแกนตั้งอยู่ที่นี่/app/code/core/Mage/SitemapModel/Resource/Catalogฉันสามารถขับได้โดยสร้างไฟล์ในตำแหน่งนี้/app/code/local/Mage/SitemapModel/Resource/Catalogดังนั้นมันจะทำงานอย่างไรกับส่วนขยาย / ปลั๊กอิน? หากฉันสร้างปลั๊กอินที่จำเป็นต้องมีฟังก์ชั่นการทำงานหลักมากกว่านี้ฉันต้องมีไฟล์ของฉันอยู่ตรงนั้นเพื่อให้ส่วนขยายนั้นใช้งานได้หรือไม่ ข้อมูลอื่นใดที่คุณต้องการให้คุณรู้ตั้งแต่ตัววีโอไอพี ขอบคุณสำหรับความเข้าใจใด ๆ …

2
Magento 2: Plugin vs Observer
ใน Magento 2 ข้อดีและข้อเสียของการใช้ปลั๊กอินกับผู้สังเกตการณ์เพื่อให้ได้อะไร ฉันเข้าใจว่าผู้สังเกตการณ์สมัครเป็นสมาชิกของเหตุการณ์ในขณะที่ปลั๊กอินสามารถกระโดดเข้ามาก่อนและ / หรือหลังจากวิธีการสาธารณะที่เรียกในคลาสวีโอไอพี แต่แน่นอนว่าพวกเขากำลังเข้าใกล้เส้นทางข้ามมากตอนนี้หรือไม่

1
Magento 2: ไฟล์ Interceptors ใน var / generation คืออะไร?
ดังนั้นฉันสังเกตเห็นบางInterceptor.phpไฟล์มาvar/generation ฉันรู้ว่าโฟลเดอร์นี้มีชั้นเรียนที่สร้างขึ้นในทันทีสำหรับต่อไปนี้: โรงงาน ผู้รับมอบฉันทะ ปลั๊กอิน ฉันคิดว่าไฟล์ Interceptor นั้นเชื่อมโยงกับปลั๊กอิน แต่บางครั้งฉันก็ไม่เข้าใจว่าไฟล์เหล่านั้นถูกสร้างขึ้นมาอย่างไร ตัวอย่างเช่นฉันมีvar/generation/Magento/Framework/App/Response/Http/Interceptor.phpแต่ไฟล์นี้ดูเหมือนจะไม่ตรงกับชั้นเรียนที่มีอยู่ใด ๆ ดังนั้นฉันกำลังมองหาเวิร์กโฟลว์อธิบายอย่างดีเกี่ยวกับวิธีสร้างไฟล์ Interceptor.php?

2
เขียนใหม่ Magento 2 คลาสเทียบกับปลั๊กอิน
Magento 2 มีคอนเซ็ปต์ของPlugins / Interception / Interceptorsซึ่งตรงข้ามกับ Magento 1 การ กระทำเหล่านี้เหมือนก่อน | หลังเหตุการณ์สำหรับวิธีสาธารณะทุกประการ อันไหนดี คุณยังสามารถใช้aroundปลั๊กอินเพื่อแทนที่การทำงานของวิธีการ แต่ Magento 2 ยังคงมีความเป็นไปได้ในการเขียนคลาสมากขึ้นหรือน้อยลงในแบบ M1 ฉันต้องการดูตัวอย่างที่การเขียนคลาสใหม่เป็นวิธีการแทนที่จะใช้ปลั๊กอิน ฉันรู้ว่าสิ่งนี้มีประโยชน์เมื่อคุณต้องการเปลี่ยนพฤติกรรมของวิธีการป้องกันหลัก แต่มีกรณีอื่น ๆ ที่แนะนำให้เขียนใหม่หรือจำเป็น?

3
คลาสใดที่“ สามารถสกัดกั้น / ปลั๊กอินได้” ใน Magento 2
วันที่: 30 พฤษภาคม 2558 (ตามลักษณะของ Magento 2 ที่เปลี่ยนแปลงไป) วีโอไอพี 2 แนะนำแนวคิดปลั๊กอินที่ดำเนินการผ่านทางรูปแบบการสกัดกั้น มีอะไรไม่ชัดเจนจากเอกสาร - คลาสและวัตถุใดใน Magento ที่ "สามารถดักจับ" ได้ นั่นคือคุณกำหนดค่าปลั๊กอินด้วย XML ที่มีลักษณะดังนี้ <config> <type name="{ObservedType}"> <plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="true"/> </type> </config> ObservedTypeแต่ก็ไม่ชัดเจนซึ่งการเรียนที่ถูกต้องในฐานะที่เป็น นี้บทความวิกิพีเดียเก่าให้เบาะแสบางอย่างเมื่อมันพูดว่า โปรดทราบว่าคุณสมบัติปลั๊กอินไม่สามารถใช้ได้กับ - คลาสที่สร้างโดยไม่ต้องพึ่งพาการฉีดนั่นคือสร้างด้วยโอเปอเรเตอร์ใหม่โดยตรง - วิธีการสุดท้าย, - คลาสสุดท้าย เป็นที่ใด ๆวัตถุที่สร้างขึ้นผ่านการฉีดอยู่พร้อมที่จะถูกดัก? ไม่ObservedTypeจำเป็นต้องเป็นคำใบ้ชนิดที่มีให้บริการในส่วน__constructวิธีการหรือสามารถมัน (ควรได้หรือไม่) เป็นสิ่งอื่นใด ส่วนใหญ่พยายามที่จะทำให้ฉันเข้าใจสิ่งที่ทำได้และไม่สามารถทำได้ด้วยเครื่องดักฟัง Magento 2 ก่อนที่ฉันจะเริ่มใช้มัน

2
จะแทนที่หรือปิดการใช้งานปลั๊กอินหลักใน Magento2 ได้อย่างไร?
ฉันกำลังสร้างตลาดโดยใช้ Magento2 ด้วยเหตุนี้ฉันจึงจำเป็นต้องโหลดคำสั่งซื้อของลูกค้าโดยใช้ข้อมูลรับรองลูกค้าของผู้ขาย ปัญหานี้คือ Magento2 ใช้ปลั๊กอินเพื่อตรวจสอบว่ามีเพียงลูกค้าของคำสั่งนี้ (หรือผู้ดูแลระบบ) ที่สามารถโหลดคำสั่งซื้อได้ isAllowed()ในกรณีนี้ผมต้องทั้งแทนที่ปลั๊กอินเป็นทั้งหมดหรือแทนที่วิธีการป้องกัน ฉันจะทำอย่างไรหากไม่มีการแก้ไขแกน Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization ดูเหมือนว่านี้: use Magento\Authorization\Model\UserContextInterface; use Magento\Framework\Exception\NoSuchEntityException; class Authorization { /** * @var UserContextInterface */ protected $userContext; /** * @param UserContextInterface $userContext */ public function __construct( \Magento\Authorization\Model\UserContextInterface $userContext ) { $this->userContext = $userContext; } /** * Checks if order is allowed …

2
Magento 2: ผลที่ตามมาของการไม่ตั้งชื่อคลาสปลั๊กอิน `\ Plugin`
มีผลต่อการใช้คลาสปลั๊กอินใน Magento 2 ที่ไม่สิ้นสุด\Pluginหรือไม่? เอกสารแนะนำ\Pluginว่าชั้นนี้ควรจะจบในชื่อ ชื่อของคลาสของปลั๊กอินหรือชนิดเสมือน ใช้สคีมาต่อไปนี้เมื่อคุณระบุองค์ประกอบนี้: \ Plugin อย่างไรก็ตามมีหลายปลั๊กอินที่ไม่ปฏิบัติตามนี้ <!-- #File: app/code/Magento/Weee/etc/frontend/di.xml--> <plugin name="weee-app-action-dispatchController-context-plugin" type="Magento\Weee\Model\App\Action\ContextPlugin"/> มีผลทางโปรแกรมใด ๆ ที่จะไม่ใช้\Pluginในชื่อคลาสของคุณหรือไม่? หรือนี่เป็นเพียงการประชุม - คล้ายกับ_Observerการประชุมระดับชื่อวีโอไอพี 1
14 magento2  plugin 

4
แทนที่คลาสนามธรรมใน Magento 2
ใน Magento 1 ฉันสามารถคัดลอกคลาสนามธรรมไปยังไดเรกทอรีท้องถิ่นหรือชุมชนและ Magento ใช้มันเมื่อโหลดอัตโนมัติคลาสนี้ มีวิธีแก้ปัญหาให้ Magento โหลดคลาสของฉันแทน vendor/magento/framework/Model/AbstractModel.phpหรือไม่? การกำหนดค่าตามความชอบdi.xmlสำหรับคลาส abstract ไม่ทำงาน ปลั๊กอินเท่านั้น?

1
มีเหตุการณ์หรือจุดปลั๊กอินเมื่อกฎรถเข็นไม่ถูกต้องอีกต่อไปหรือไม่
มีเหตุการณ์หรือสถานที่ที่ฉันสามารถเสริมได้หรือไม่เมื่อกฎราคาตะกร้าสินค้าไม่ถูกต้องอีกต่อไป (เช่นเมื่อหมดอายุหรือหากคุณเปลี่ยนปริมาณของผลิตภัณฑ์อื่นที่ไม่ใช้แล้ว) ฉันรู้ว่ามันถูกลบออกจากรถเข็นโดยอัตโนมัติ แต่ฉันไม่สามารถหาสถานที่ที่เกิดขึ้นในรหัสได้ ฉันกำลังเขียนโมดูลที่เพิ่มผลิตภัณฑ์ฟรีลงในรถเข็นสำหรับคูปองที่ผลรวมย่อยมากกว่าจำนวน X มันทำงานได้ทั้งหมดยกเว้นเมื่อลดปริมาณสินค้าในรถเข็นที่ผลรวมย่อยต่ำกว่า X คูปองถูกลบ แต่สินค้าของฉันยังคงอยู่ในรถเข็น จนถึงตอนนี้ฉันได้แตะที่กิจกรรมต่อไปนี้เพื่อทำสิ่งที่ฉันต้องการจนถึงตอนนี้ ... salesrule_validator_process checkout_cart_update_items_after sales_quote_collect_totals_before ฉันพบว่าสิ่งMagento\Quote\Model\CouponManagementที่ดูเหมือนจะมีความน่าเชื่อถือเนื่องจากมันมีset()และremove()วิธีการ แต่พวกเขาดูเหมือนจะไม่ได้รับการเรียกเมื่อมีการปรับปรุงรถเข็น ในcheckout_cart_update_items_afterมันดูเหมือนว่าสถานที่ตรรกะฉันสามารถตรวจสอบได้ แต่ดูเหมือนว่ากฎยังคงตั้งตาม$cart->getQuote()->getAppliedRuleIds() UPDATE: ฉันลงเอยด้วยการเพิ่มผู้สังเกตการณ์สำหรับcheckout_cart_save_afterเหตุการณ์ที่ทำงานหลังจากcollectTotals()นั้นดังนั้นจึงรู้ว่ากฎยังคงอยู่ในรถเข็นหรือไม่ แล้วฉันเป็นพื้นเปรียบเทียบ$quote->getAppliedRuleIds()กับ$quote->getOrigData('applied_rule_ids')เพื่อดูว่ากฎได้ถูกลบออก ฉันรู้สึกว่ามีวิธีที่ดีกว่าในการทำเช่นนี้ แต่ใช้งานได้ในขณะนี้ ฉันยังมีปัญหากับคูปองที่หมดอายุแม้ว่า ...

3
ปลั๊กอิน Phpstorm ที่มีประโยชน์ที่สุดสำหรับการพัฒนา Magento 2 คืออะไร
รายการเครื่องมือการพัฒนา magento2 ที่มีประโยชน์คืออะไร อะไรคือปลั๊กอินที่มีประโยชน์ phpstorm ชั้นนำสำหรับการพัฒนา magento2?

3
Magento 2: ส่วนขยายใดให้เลือกใช้
เราสามารถขยายคอนโทรลเลอร์ได้สองวิธี: การใช้การกำหนดค่าตามความชอบและการใช้ปลั๊กอิน แต่ฉันไม่เข้าใจว่าอันไหนดีและข้อดี / ข้อเสียของการตั้งค่า vs ปลั๊กอิน <preference for="Magento\Checkout\Controller\Index\Index" type="mymodule\Helloworld\Controller\Index\Index" /> <type name="Magento\Catalog\Model\Product"> <plugin name="getname-test-module" type="mymodule\Helloworld\Model\Plugin\Product" sortOrder="10"/> </type>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.