คำถามติดแท็ก object-manager

7
Magento 2: การใช้หรือไม่ใช้ ObjectManager โดยตรง?
ตกลงดังนั้นเมื่อวานนี้เราได้มีการพูดคุยใหญ่กับคนอื่น ๆ จากชุมชนวีโอไอพีเกี่ยวกับการใช้งานโดยตรงของObjectManagerในชั้นเรียน / แม่แบบ ฉันได้ทราบถึงสาเหตุที่เราไม่ควรใช้ ObjectManager โดยตรงโดยอ้างถึง Alan Kent : มีสาเหตุหลายประการ รหัสจะใช้งานได้ แต่เป็นแนวปฏิบัติที่ดีที่สุดที่จะไม่อ้างอิงคลาส ObjectManager โดยตรง เพราะเราพูดอย่างนั้น! ;-) (แสดงได้ดีกว่าเนื่องจากรหัสที่สอดคล้องกันคือรหัสที่ดี) รหัสสามารถใช้กับกรอบการฉีดที่แตกต่างกันในอนาคต การทดสอบนั้นง่ายกว่า - คุณผ่านการจำลองแบบอาร์กิวเมนต์สำหรับคลาสที่ต้องการโดยไม่ต้องให้ ObjectManager จำลอง มันช่วยให้การพึ่งพาชัดเจนยิ่งขึ้น - เป็นที่ชัดเจนว่ารหัสขึ้นอยู่กับผ่านรายการคอนสตรัคแทนที่จะมีการพึ่งพาที่ซ่อนอยู่ในช่วงกลางของรหัส มันสนับสนุนให้โปรแกรมเมอร์คิดเกี่ยวกับแนวความคิดเช่นการห่อหุ้มและการทำให้เป็นโมดูลได้ดีขึ้น - ถ้าคอนสตรัคเตอร์มีขนาดใหญ่บางทีมันอาจเป็นสัญญาณที่รหัสจำเป็นต้องทำการเปลี่ยนใหม่ จากสิ่งที่ฉันเห็นใน StackExchange ผู้คนจำนวนมากมักจะไปหาวิธีแก้ปัญหาที่ง่าย / สั้น / ไม่แนะนำเช่นบางสิ่งเช่นนี้: <?php //Get Object Manager Instance $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); //Load product by product …

2
Magento 2 - ตัวจัดการวัตถุพยายามยกระดับบทคัดย่อ ( ข้อผิดพลาดร้ายแรง )
เล่นกับ Magento 2 แต่เจอปัญหาฉันไม่สามารถห่อหัวของฉัน ตัวจัดการวัตถุพยายามสร้างอินสแตนซ์ของคลาสนามธรรมซึ่งทำให้เกิดข้อผิดพลาดร้ายแรง มีใครรู้บ้างว่าอะไรทำให้เกิดสิ่งนี้หรือชี้ให้ฉันไปในทิศทางที่ถูกต้อง? ข้อผิดพลาด Fatal error: Cannot instantiate abstract class Magento\Framework\Model\Resource\AbstractResource in /lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 75 ปัญหา \Magento\Quote\Model\Quoteโมดูลของฉันมีรูปแบบที่ขยายได้ คอนสตรัคของรุ่นนี้มีสายฉีดดังต่อไปนี้: \Magento\Framework\Model\Resource\AbstractResource $resource = null,. คอนโทรลเลอร์ที่กำลังสร้างโมเดลนั้นขยาย\Magento\Backend\App\Actionและใช้$this->_objectManager->create()เพื่อสร้างอินสแตนซ์ของโมเดล สิ่งที่ฉันไม่สามารถห่อหัวของฉันไปรอบ ๆ คือถ้าฉันยกตัวอย่างรูปแบบวีโอไอพีมันก็ใช้งานได้ แต่ถ้าฉันสร้างแบบจำลองของฉันมันพยายามที่จะยกตัวอย่างระดับนามธรรมนี้โยนข้อผิดพลาดข้างต้น อะไรบอกให้ผู้จัดการวัตถุทำสิ่งนี้และฉันจะแก้ปัญหาได้อย่างไร ความคิดแรกของฉันคือ Magento ใช้di.xmlเพื่อแทนที่สิ่งนี้ดำเนินการหรือบางสิ่งบางอย่างนี่ไม่ใช่กรณี ขอบคุณที่สละเวลาอ่านข้อความนี้ ความช่วยเหลือหรือข้อมูลใด ๆ เกี่ยวกับปัญหานี้ได้รับการชื่นชม

2
วิธีที่เหมาะสมสำหรับการทดสอบหน่วยโค้ด PHP7 ด้วย PHPUnit 4.1 ใน Magento 2 คืออะไร
เมื่อฉันเขียนโมดูลของฉันฉันพยายามจัดหาการทดสอบหน่วยสำหรับส่วนที่สำคัญที่สุดของแอปพลิเคชัน อย่างไรก็ตามในขณะนี้ (Magento 2.1.3) มีหลายวิธีในการเขียนแบบทดสอบหน่วย: วิธีทดสอบต่าง ๆ รวมเข้ากับbin/magento dev:tests:run unitและรันบนการตั้งค่า phpunit เริ่มต้นที่มาพร้อมกับ Magento เขียนแยกต่างหากเรียกใช้พวกเขาด้วยvendor/bin/phpunit app/code/Vendor/Module/Test/Unitและเยาะเย้ยทุกอย่างที่เป็นวีโอไอพี เขียนแยกต่างหากจำลองทุกอย่างและใช้ PHPUnit เวอร์ชันสากลของระบบ เขียนแยกต่างหากเรียกใช้ด้วยvendor/bin/phpunitแต่ยังใช้งาน\Magento\Framework\TestFramework\Unit\Helper\ObjectManagerได้ Magento 2 และ PHPUnit นอกจากนั้น Magento 2 ยังมาพร้อมกับ PHPUnit 4.1.0 ซึ่งไม่รองรับ PHP7 ชาวบ้านประเภทการบอกใบ้ (ชอบstringและ `int) และการประกาศผลตอบแทนประเภทในลายเซ็นของคุณจะทำให้เกิดข้อผิดพลาด ตัวอย่างเช่นอินเตอร์เฟส / คลาสที่มีลายเซ็นเมธอดดังนี้: public function foo(string $bar) : bool; ... จะไม่สามารถเยาะเย้ยโดย PHPUnit 4.1.0 :-( สถานการณ์ปัจจุบันของฉัน …

3
ข้อผิดพลาดร้ายแรง: ไม่สามารถยกตัวอย่างอินเทอร์เฟซใน Magento 2 ได้หรือไม่
ในฐานะที่เป็นส่วนหนึ่งของการสร้างผลิตภัณฑ์ชุดโดยทางโปรแกรมในวีโอไอพี 2 ฉันได้รับข้อผิดพลาดด้านล่าง แม้ฉันจะลบ var / cache และการสร้าง นี่อาจเป็นคำถามที่ซ้ำกัน แต่ไม่มีคำตอบสำหรับปัญหานี้ ข้อผิดพลาดร้ายแรง: ไม่สามารถสร้างอินเทอร์เฟซ Magento \ Catalog \ Api \ Data \ ProductExtensionInterface ใน \ ObjectManager \ Factory \ Dynamic \ Developer.php ที่บรรทัด 73 ใช้โค้ดด้านล่างเพื่อการอ้างอิงของลิงค์ $productExtension = $objectManager->create(\Magento\Catalog\Api\Data\ProductExtensionInterface::class); $option = $objectManager->create(\Magento\Bundle\Api\Data\OptionInterface::class); $option->setTitle('Size'); $option->setType('radio'); $option->setRequired(true); $option->setPosition(1); //$option->setProductLinks($links); $productExtension->setBundleOptions([$option]); $_product->setExtensionAttributes($productExtension); ฉันกำลังใช้ตัวจัดการวัตถุเพื่อวัตถุประสงค์ชั่วคราว / ด่วนจะแปลงตัวจัดการวัตถุให้เป็นตัวสร้างคำสั่ง ผู้ใดสามารถช่วยฉันในเรื่องนี้

5
Magento2: รับ URL สื่อในไฟล์เทมเพลต (โดยไม่เรียกผู้จัดการวัตถุโดยตรง)
วิธีรับMedia URLไฟล์เทมเพลต วิธีแก้ปัญหาทั้งหมดที่ฉันพบคือการเรียก Object Manager โดยตรง ข้อกังวลอีกข้อของฉันคุณสามารถโทรหาผู้จัดการวัตถุโดยตรงเพื่อเป็นการปฏิบัติที่ดีที่สุดได้ไหม (เพราะในโซลูชันส่วนใหญ่พวกเขาใช้ตัวจัดการวัตถุ)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.