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

5
เมื่อใดที่เราควรใช้ที่เก็บและโรงงานใน Magento 2
ฉันได้ผ่านบทช่วยสอนใน Magento 2 และสิ่งนี้ทำให้ฉันสับสนเล็กน้อย ฉันเห็นว่ามีสองวิธีที่เราสามารถอ่าน / เขียนเอนทิตีธุรกิจได้: ดึงข้อมูล ใช้วิธีการจากโรงงาน $object = $this->myFactory->create(); $object->load($myId); การใช้วิธีการเก็บข้อมูล $repo = $this->myRepository(); $object = $repo->getById($myId); บันทึกข้อมูล ใช้วิธีการจากโรงงาน $object = $this->myFactory->create(); $object->load($myId); $object->setData('something', 'somethingDifferent')->save(); การใช้วิธีการเก็บข้อมูล $repo = $this->myRepository(); $object = $repo->getById($myId); $object->setData('something', 'somethingDifferent'); $repo->save($object); ฉันยังสามารถเห็นว่าทั้งพื้นที่เก็บข้อมูลและชั้นโรงงานสามารถฉีดโดยใช้การฉีดพึ่งพา อย่างน้อยก็ทำให้ฉันสับสน เมื่อใดที่เราควรใช้วิธีการจัดเก็บและวิธีการจากโรงงาน? การปฏิบัติที่ดีที่สุดที่เราต้องทำคืออะไร?

3
สิ่งที่กระตุ้นให้เกิดการสร้างโรงงานใน Magento 2
Magento 2 มีไฟล์คลาสจำนวนหนึ่งที่สร้างไว้ล่วงหน้าหรือสร้างขึ้นทันที พวกเขาอาศัยอยู่ใน var/generated ไฟล์ที่สร้างขึ้นเหล่านี้รวมถึงคลาสของโรงงาน จากเอกสารฉันเข้าใจว่าโปรแกรมเมอร์ใช้คลาสโรงงานเพื่ออินสแตนซ์วัตถุ "ที่ไม่สามารถฉีดได้" วัตถุ "ที่ไม่สามารถฉีดได้" เป็นวัตถุที่ไม่สามารถเพิ่มผ่าน__constructorการฉีดตามปกติเนื่องจากต้องให้ผู้ใช้ป้อนอินสแตนซ์ สิ่งที่ไม่ชัดเจนจากเอกสารประกอบคือวีโอไอพี 2 รู้ว่ามันต้องการสร้างคลาสโรงงาน บิตนี้ หากตัวจัดการวัตถุที่พบไม่มีอยู่ในโหมดรันไทม์หรือคอมไพเลอร์ตัวจัดการวัตถุจะสร้างโรงงาน ทำให้ดูเหมือนว่าถ้าฉันใช้คลาสโรงงานในตัวจัดการวัตถุ (หรือโดยการขยายในการพึ่งพา __ คอนสตรัคชันการฉีด) สิ่งที่วีโอไอพี 2 จะสร้างขึ้นมาเพื่อฉัน แต่ผู้จัดการวัตถุจะรู้ได้อย่างไรว่าสิ่งที่ฉันขอเป็นโรงงานหรือไม่ นอกจากนี้ดูเหมือนว่าจะมีสอง คำสั่งสำหรับการสร้างโดยอัตโนมัติ (หรือ "รวบรวม") คลาสที่สร้างขึ้นทั้งหมด การรันคำสั่งอย่างใดอย่างหนึ่งเหล่านี้จะสร้างคลาส Factory จำนวนมาก ไฟล์คำสั่งกำหนดค่าและ / หรือไฟล์ใดที่คำสั่งเหล่านี้มองหาเพื่อสร้างวัตถุที่ต้องการจากโรงงาน? ฉันรู้ว่าการติดตามตัวจัดการวัตถุและ / หรือรหัสคำสั่งทุกอย่างจะเปิดเผยสิ่งนี้ แต่ฉันหวังว่าจะหลีกเลี่ยงการเดินทางที่ยาวนานและลำบาก

2
การใช้คลาสโรงงานใน magento2
อะไรคือจุดประสงค์ของการแสดงผลหน้าโมดูลที่กำหนดเองใน Magento2 โดยใช้\Magento\Framework\View\Result\PageFactoryคลาสโรงงานผลลัพธ์ที่แทรกไว้ในตัวสร้างและทำให้หน้าแสดง $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE); แทนที่จะใช้จอแสดงผลด้านล่างซึ่งเหมือนกับใน Magento 1.x $this->_view->loadLayout(); $this->_view->renderLayout();

2
ข้อดีของรูปแบบโรงงาน Magento2 เหนือ Magento 1
Magento 2 กำลังใช้คลาสของโรงงานเพื่อไม่ให้ฉีดยา ตัวอย่างเช่นระดับผลิตภัณฑ์: ProductFactory ตัวอย่างเช่นชั้นลูกค้า:CustomerFactory ฉันไม่เข้าใจรูปแบบของโรงงานที่นี่คืออะไร เพราะสำหรับแต่ละคลาสที่เกี่ยวข้องกับ 1 คลาสจากโรงงาน ฉันคิดว่ามันเป็นสิ่งที่ซ้ำกัน ทำไมเราจึงไม่ควรสร้างโรงงานนามธรรมCustomerFactory, ProductFactoryetc? และตัวอย่างเช่น: เราสามารถส่งผ่านAbstractFactoryสำหรับประเภทการตรวจสอบแทนProductFactoryในการProductRepositoryสร้างคลาส ดังนั้นเราจึงสามารถหลีกเลี่ยงข้อต่อแน่นระหว่างProductRepositoryและProductFactory บทคัดย่อระดับโรงงาน: namespace Magento\Framework\ObjectManager\Code\Generator; /** * Abstract Factory class */ abstract class AbstractFactory { /** * Object Manager instance * * @var \Magento\Framework\ObjectManagerInterface */ protected $_objectManager = null; /** * Instance name to create * …

3
Magento 2: การใช้สัญญาบริการมีประโยชน์อย่างไร?
ดังที่บางคนอาจจะรู้วิธีที่วีโอไอพี 2 แนะนำให้จัดการกับแบบจำลอง / การรวบรวมสำหรับการกระทำ CRUD คือการใช้สัญญาบริการ แต่ก็ยังเป็นไปตาม Magento SE Q&A ดูเหมือนว่าคนส่วนใหญ่มักจะใช้โมเดล / โมเดลทรัพยากร / คอลเลกชันโดยตรงแทน เป็นตัวอย่างในการโหลดใบเสนอราคาฉันสามารถทำได้โดยตรงผ่านทางโรงงานเช่นนี้: $this->quoteFactory->create()->load($quoteId); ในกรณีที่$this->quoteFactoryเป็นตัวอย่างของ\Magento\Quote\Model\QuoteFactory แต่ฉันสามารถทำได้ผ่านสัญญาบริการเช่นนี้: $this->quoteRepository->get($quoteId); ในกรณีที่$this->quoteRepositoryเป็นตัวอย่างของ\Magento\Quote\Api\CartRepositoryInterface ดังนั้นคำถามของฉันคือประโยชน์ของการใช้สัญญาบริการกับโรงงานมีอะไรบ้าง

2
Magento 2: การส่งผ่านตัวแปรจากแอคชั่นคอนโทรลเลอร์ไปที่“ ดู”
ใน Magento 1 หากคุณต้องการส่งผ่านข้อมูลจากแอ็คชั่นคอนโทรลเลอร์ของคุณไปยัง "มุมมอง" (เช่นบล็อกในเลย์เอาต์ของคุณคุณสามารถทำได้) เพิ่มค่า / วัตถุให้กับรีจิสตรีส่วนกลางผ่าน Mage::register ดึงวัตถุบล็อกโดยตรงและตั้งค่าคุณสมบัติข้อมูลบนวัตถุบล็อกที่ถูกดึงข้อมูลหลังจากเรียกใช้ loadLayout วิธีการโทรบนบล็อกวัตถุในphtmlไฟล์และให้วัตถุบล็อกใช้เลเยอร์โมเดล / ฐานข้อมูลเพื่ออ่านข้อมูลที่บันทึกไว้ก่อนหน้านี้ในแอคชั่นคอนโทรลเลอร์ การใช้วิธีการบล็อกวัตถุเพื่ออ่านจากฐานข้อมูลยังคงปรากฏว่าทำงานได้ใน Magento 2 - ซึ่งเหมาะสำหรับการใช้งานบางประเภท อย่างไรก็ตาม ไม่มีการลงทะเบียนระดับโลกใน Magento 2 อีกต่อไป (หรือมีอยู่แล้ว) ตอนนี้ระบบเลย์เอาต์ทำงานโดยการสร้างวัตถุหน้าผ่านโรงงานและคุณไม่สามารถคว้าการอ้างอิงบล็อกแบบเดียวกับที่คุณทำได้ใน Magento 1 เป็นไปได้ไหมใน Magento 2 ที่จะส่งผ่านข้อมูลโดยตรงจากคอนโทรลเลอร์ลงสู่มุมมอง? หรือนี่เป็นรูปแบบที่ตรงกับโลกแห่ง Design Pattern ™ที่กล้าหาญของวีโอไอพีหรือไม่? หากนี่เป็นรูปแบบที่ตรงเกินไปสิ่งที่ควรทำถ้ามีข้อมูลจากการคำนวณบางอย่างที่เราต้องการแสดงในเทมเพลต แต่ไม่ต้องการเก็บข้อมูลนั้นไว้ในระบบ stateful (เช่นเราไม่ต้องการบันทึกลงใน ฐานข้อมูล) ฉันสามารถคิดถึงวิธีที่แตกต่างกันเล็กน้อยในการแฮ็คข้อมูลนี้ด้วยตนเอง - แต่ฉันสนใจว่า Magento 2 ต้องการให้คุณทำอย่างไร หมายเหตุ : …

1
ชื่อเต็มของคลาสในวิธีโรงงานของวีโอไอพี
ใน Magento 1 ถ้าฉันใช้ชื่อคลาส Magento แบบเต็มในวิธีการจากโรงงานฉันสามารถสร้างวัตถุได้ //trying full class name instead of catalog/product $object = Mage::getModel('Mage_Catalog_Model_Product'); อย่างไรก็ตามสิ่งเดียวกันนี้ใช้ไม่ได้กับผู้ช่วยเหลือ ถ้าคุณลอง Mage::helper('Mage_Core_Helper_Url'); คุณได้รับ Warning: include(Mage/Mage/Core/Helper/Url/Helper/Data.php): failed to open stream: No such file or directory in /path/to/magentolib/Varien/Autoload.php on line 93 #0 /path/to/magentolib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(Mage/Ma...', '/path/to/magent...', 93, Array) #1 /path/to/magentolib/Varien/Autoload.php(93): Varien_Autoload::autoload() #2 [internal function]: Varien_Autoload->autoload('Mage_Mage_Core_...') …
11 model  helper  factory 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.