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

1
Magento 2.1: การใช้ตัวจัดการเอนทิตี
จาก 2.1 Magento ได้เปิดตัวMagento/Framework/Model/EntityManager ฉันอาจจะผิดที่นี่ แต่จากความเข้าใจของฉันมันคือการแทนที่Magento/Framework/Model/AbstractModelซึ่งมีการใช้คุณสมบัติผ่านทางมรดกและแก้ปัญหานี้ผ่านทางองค์ประกอบ (FYI: https://en.m.wikipedia.org/wiki/Composition_over_inheritance ) คุณสามารถรับตัวอย่างได้ที่นี่ในไฟล์หลัก: https://github.com/magento/magento2/blob/59671558ecdab652b40db2d1a7c63d5b1dea0a92/app/code/Magento/Cms/Model/Block.php โดยทั่วไปการดำเนินการ CRUD ทั้งหมดจะประกาศอย่างชัดเจนในชั้นเรียนและเลื่อนไปEntityManagerเรียน ก่อนหน้า 2.1 วิธีการหลักถูกเรียกผ่านการสืบทอด ดังนั้นคำถามของฉันคือ: สิ่งที่เป็นประโยชน์ของEntityManagerระบบสืบทอด 2.1 ก่อน? เป็นเพียงแค่การประกาศวิธีการ CRUD นี้ (เช่นตัวอย่างข้างต้น) พอที่จะเริ่มต้นการดำเนินการนั้นในโมดูล CRUD ที่กำหนดเองหรือจะมีมากขึ้นหรือไม่

2
วิธีที่ดีที่สุดในการโหลดโมเดลที่กำหนดเองใน Magento 2
เพราะมันยากสำหรับฉันที่จะหาวิธีที่ถูกต้องด้านล่างคุณจะได้พบกับแนวปฏิบัติที่ดีที่สุดที่ฉันสร้างขึ้นมา สนุกแก้ไขภาษาอังกฤษของฉันถ้าจำเป็นและบอกฉันฉันผิดถ้าฉันเป็น :) แก้ไข: ... และฉันพบว่าฉันผิดในบางแง่มุม ดังนั้นฉันจึงอัพเดทโพสต์ต้นฉบับหลังจากคำตอบของราฟาเอลช่วยให้ฉันเข้าใจมากขึ้น ขอบคุณเขา! แนวคิดที่ใช้ด้านล่าง : มันจะง่ายขึ้นสำหรับคุณที่จะเข้าใจรหัสและคำอธิบายด้านล่างหากคุณพอใจกับแนวคิดเหล่านี้: การฉีดขึ้นอยู่กับ (เป็นทุก ๆ $this->variableตัวแปรในรหัสจะถูกฉีด) สัญญาบริการและพื้นที่เก็บข้อมูล โรงงาน บริบท : เพื่อให้มีบริบทมากขึ้นลองจินตนาการว่าเรามีโมดูลที่สร้างอย่างถูกต้องด้วย: คลาสบล็อก CustomBlock ที่มีเมธอด getCustomModel($id) , เมธอดนี้ส่งคืนออบเจกต์ CustomModel โดยอิงจาก id ที่ส่งเป็น param ประเภท CustomModel สอดคล้องกับรูปแบบใน \Vendor\Module\Model\CustomModel โมเดลนี้มาพร้อมกับโมเดลทรัพยากร (ใน \Vendor\Module\Model\ResourceModel\CustomModel ) และด้วยที่เก็บ (ใน\Vendor\Module\Model\CustomModelRepository) คำถาม : แนวปฏิบัติที่ดีที่สุดในการปล่อยให้ทุกสิ่งโหลดวัตถุ CustomModel คืออะไร คุณไม่สามารถใช้load()จากวัตถุ CustomModel เนื่องจากวิธีนี้เลิกใช้แล้ว แนวปฏิบัติที่ดีบอกว่าคุณต้องใช้ …

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 ดังนั้นคำถามของฉันคือประโยชน์ของการใช้สัญญาบริการกับโรงงานมีอะไรบ้าง

1
หลีกเลี่ยงการบันทึกเป็นลูปในการกระทำโดยรวม
ฉันได้สร้างโมดูล CRUD ของตัวเองที่มีการดำเนินการแก้ไขแบบอินไลน์คล้ายกับหน้า CMS ทุกอย่างทำงานได้ดี แต่เมื่อใช้ phpsniffer กับมาตรฐาน EcgM2ฉันได้รับคำเตือนนี้: ตรวจพบเมธอด LSD รุ่น () ในลูป ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร หมายเหตุ: คำเตือนเดียวกันจะปรากฏขึ้นหากฉัน "ดมกลิ่น" ไฟล์หลักที่ลิงก์ด้านบน นี่คือexecuteวิธีการของฉันในกรณีที่มีคนต้องการมัน แต่มันคล้ายกับตัวควบคุมหน้า CMS public function execute() { /** @var \Magento\Framework\Controller\Result\Json $resultJson */ $resultJson = $this->jsonFactory->create(); $error = false; $messages = []; $postItems = $this->getRequest()->getParam('items', []); if (!($this->getRequest()->getParam('isAjax') && count($postItems))) { return …

2
การเพิ่มองค์ประกอบของรูปแบบภาพไปยังฟอร์มเพิ่ม / แก้ไข
ฉันกำลังสร้างโมดูล CRUD สำหรับ Magento 2 โดยใช้ส่วนประกอบ UI สำหรับรายการผู้ดูแลระบบและรูปแบบและหนึ่งในหน่วยงานของฉันมีฟิลด์รูปภาพ แต่ฉันไม่สามารถทำงานได้ตามที่ควร นี่คือวิธีการทำงาน เมื่ออยู่ในโหมดเพิ่มหรือในโหมดแก้ไขที่ไม่มีภาพที่อัปโหลดควรมีรูปแบบการป้อนไฟล์แบบง่าย เมื่ออัปโหลดไฟล์แล้วควรแสดงตัวอย่างภาพและกล่องลบด้านล่าง ฉันไม่ได้มองหาการออกแบบนี้อย่างแน่นอน มันอาจดูแตกต่าง แต่มีฟังก์ชั่นเหมือนกัน ใน Magento 1 ฉันสามารถทำสิ่งนี้ได้เพียงสร้างตัวบล็อกบล็อคของตัวเอง class {{Namespace}}_{{Module}}_Block_Adminhtml_{{Entity}}_Helper_Image extends Varien_Data_Form_Element_Image { protected function _getUrl() { $url = false; if ($this->getValue()) { $url = Mage::helper('{{namespace}}_{{module}}/{{entity}}_image')->getImageBaseUrl().$this->getValue(); } return $url; } } และเพิ่มสิ่งนี้ในบล็อกของฉัน $fieldset->addType( 'image', Mage::getConfig()->getBlockClassName('{{namespace}}_{{module}}/adminhtml_{{entity}}_helper_image') ); แต่ฉันไม่มี form block …

2
อะไรและทำไมเป็นวิธีที่เหมาะสมในการโหลดแบบจำลอง
ฉันมีประสบการณ์ค่อนข้างมากกับ Magento แต่ฉันรู้ว่าฉันไม่เข้าใจวิธีการโหลดแบบจำลองที่ถูกต้องและทำไม ฉันได้อ่านทุกสิ่งที่ฉันสามารถทำได้เกี่ยวกับหัวข้อนี้ แต่ผู้คนอธิบายสิ่งต่าง ๆ เช่นนี้ไม่เคยลึกพอที่จะอธิบายได้ทำไมต้องใช้วิธีการเฉพาะนี้แทนวิธีอื่น สมมติว่าไม่มีที่เก็บสำหรับรุ่นที่ฉันต้องการโหลด จนถึงตอนนี้ฉันมักจะใช้ model ในตัวสร้างแล้วก็โหลดมัน public function __construct( \Vendor\Module\Model\Something $somethingModel ) { $this->somethingModel = $somethingModel; } public function getTestById($id) { return $this->somethingModel->load($id); } และมันก็ใช้งานได้ตามปกติฉันก็ค่อนข้างแน่ใจว่ามันหรืออย่างน้อยก็ถูกใช้ในแกนกลางทั่วไป แต่ฉันเห็นเพื่อนร่วมงานคนหนึ่งของฉันใช้ modelFactory->create()->load($id) เท่าที่ฉันเข้าใจโรงงานกำลังถูกใช้เพื่อสร้างเอนทิตีใหม่ตัวอย่างเช่นถ้าฉันต้องการสร้างผลิตภัณฑ์ใหม่จากนั้นฉันสามารถสร้างโรงงานเติมข้อมูลด้วยข้อมูลแล้วบันทึก แต่แล้วอีกครั้งฉันเริ่มค้นคว้าหัวข้อและฉันเห็นตัวอย่างจาก Fabian Schmengler ( เมื่อเราควรใช้ Repository และ Factory ใน Magento 2? ) ผู้โหลดแบบจำลองด้วยวิธีนี้และไม่สนับสนุนคนอื่นจากการโหลดแบบจำลองเขาไม่ได้ทำ ไม่อธิบายว่าทำไมนอกจากบอกว่ามันไม่ใช่ส่วนหนึ่งของสัญญาการบริการ เท่าที่ฉันเข้าใจที่เก็บข้อมูลเป็นส่วนหนึ่งของสัญญาบริการดังนั้นฉันจึงไม่เห็นการเชื่อมต่อใด ๆ ที่นี่เมื่อพูดถึงการโหลดรุ่นที่ไม่สามารถใช้งานได้ผ่านที่เก็บข้อมูล …

2
Magento 2 และสัญญาการบริการ
ฉันรู้ว่ามีคำถามมากมายเกี่ยวกับคำถามนี้ แต่ฉันไม่แน่ใจว่าจะเข้าใจอย่างชัดเจน .. เราต้องใช้สัญญาบริการเมื่อใด พวกเขาเปลี่ยน CRUD ทำโดย Model/ ResourceModel? เราจำเป็นต้องสร้างสัญญาบริการสำหรับแต่ละเอนทิตีซึ่งจะใช้ตารางข้อมูลในโมดูลที่กำหนดเองทุกครั้งหรือไม่ พวกเขาน่าสนใจสำหรับการพัฒนาในอนาคตหรือไม่ เหตุใด Magento จึงใช้save/ loadจาก Model ใน Controller / Block และบางครั้งไม่ ขอบคุณ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.