คำถามติดแท็ก best-practice

แสดงถึงคำถามที่เกี่ยวข้องกับแนวปฏิบัติที่ดีที่สุดใน Magento

5
จะเขียนนามสกุลที่กำหนดเองได้อย่างไร?
เนื่องจากเมื่อเร็ว ๆ นี้ฉันมีปัญหามากมายเกี่ยวกับส่วนขยายที่ฟรีและเชิงพาณิชย์ฉันตัดสินใจที่จะถามคำถามนี้และตอบคำถามด้วยขั้นตอนที่ฉันมักจะปฏิบัติตามเมื่อเขียนส่วนขยาย อย่าลังเลที่จะแก้ไขคำตอบหรือเพิ่มคำตอบใหม่ ในกรณีส่วนใหญ่เมื่อติดตั้งส่วนขยายหรือชุดรูปแบบฉันต้องใช้เวลาสองสามชั่วโมง (บางครั้งมากกว่าหรือบางครั้งก็น้อยกว่า) เพื่อให้สามารถใช้งานได้ในทุกสภาพแวดล้อมที่ฉันต้องการ: dev: โดยปกติlocalhostโครงการจะอยู่ในโฟลเดอร์ย่อย preprod & สด สิ่งนี้เกิดขึ้นแม้จะมีส่วนขยายจากผู้ให้บริการส่วนขยายขนาดใหญ่ (ที่ควรจะเป็นแบบนิรนามอย่างน้อยก็จนกว่าฉันจะบ้าจริง ๆ และเพิ่มชื่อของพวกเขาในที่นี่) ดังนั้นคำถามหลักคือ .. ขั้นตอนใดที่ฉันควรพิจารณาเมื่อเขียนส่วนขยาย ของรหัสและทำให้มันง่ายขึ้นสำหรับบุคคลด้านเทคนิคและไม่ใช่ด้านเทคนิคที่จะใช้มันและสำหรับคนทางเทคนิคที่จะเปลี่ยนมันได้หรือไม่

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 …

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); ฉันยังสามารถเห็นว่าทั้งพื้นที่เก็บข้อมูลและชั้นโรงงานสามารถฉีดโดยใช้การฉีดพึ่งพา อย่างน้อยก็ทำให้ฉันสับสน เมื่อใดที่เราควรใช้วิธีการจัดเก็บและวิธีการจากโรงงาน? การปฏิบัติที่ดีที่สุดที่เราต้องทำคืออะไร?

6
Modern Magento 1.X กระบวนการทำงานและเครื่องมือในการพัฒนา
ฉันยังใหม่กับ Magento Development (CE 1.6) และฉันยังคงพยายามกำหนดเวิร์กโฟลว์ของฉัน ตอนนี้ฉันพัฒนาบน Mac OSX 10.8 ด้วย Netbeans 7.3 แต่ฉันพบว่า Netbeans ช้าและหยุดฉัน ฉันมักจะเปลี่ยนไปใช้ Sublime Text 2 เพื่อดู / แก้ไขไฟล์อย่างรวดเร็วหรือฉันจะดึง Vim ขึ้นมาเพื่อความสะดวก คำถามของฉัน : " เวิร์กโฟลว์ Magento 1.X ยุคใหม่มีหน้าตาเป็นอย่างไร? " " เครื่องมือ / การกำหนดค่า / ปลั๊กอินใดเหมาะที่สุดสำหรับการพัฒนา Magento " ฉันรู้ว่านี่เป็นเรื่องส่วนตัวและจะไม่มี 'เวิร์กโฟลว์เดียวที่จะควบคุมพวกเขาทั้งหมด' แต่ฉันเชื่อว่านักพัฒนาที่ได้รับการรับรองและมีประสบการณ์ทุกคนจะมีตัวเลือกทั่วไป อย่างน้อยที่สุดข้าก็คาดหวังว่าความรู้ที่ได้จากการต่อสู้ ฉันขอขอบคุณที่ป้อน / ข้อเสนอแนะ / ข้อเสนอแนะใด …

3
Magento 2 เป็นวิธีแก้ปัญหาแบบไร้หัว
ฉันต้องการทราบว่ามีวิธีปฏิบัติที่ดีที่สุดในการใช้Magento 2 เป็นโซลูชันอีคอมเมิร์ซที่ไม่มีหัวหรือไม่ อีคอมเมิร์ซทั่วไปในปี 2560 คือการมีโซลูชันช่องทาง omni ซึ่งรวมถึง อีคอมเมิร์ซ CMS หลากหลาย การรวมระบบระดับ (ERP, ... ) ฉันต้องการทราบว่าเกี่ยวข้องกับ Magento 2 API กับโซลูชันประเภทนี้อย่างไร แนวทางของฉัน: ใช้เฟรมเวิร์กส่วนหน้าอื่น (เช่นเชิงมุม) สำหรับเดสก์ท็อป / มือถือ webapp และแอพมือถือ ใช้ Magento 2 API เท่านั้นเพื่อดึงหรือโต้ตอบกับข้อมูล / การกระทำของอีคอมเมิร์ซ ใช้ CMS API เพื่อดึงข้อมูล CMS เท่านั้น Pro:เฉพาะของ API, omnichannel ข้อด้อย:ข้อ จำกัด ด้านประสิทธิภาพ / คุณสมบัติ / …

2
วิธีที่แนะนำในการโยนข้อยกเว้นใน Magento คืออะไร
วิธีการทั้งหมดต่อไปนี้ใช้ในวีโอไอพีคอร์ดังนั้นวิธีใดที่เป็นวิธีที่ต้องการ (หรือ "วิธีปฏิบัติที่ดีที่สุด") ล่าสุด? Mage::throwException('Some Message')- 732 ประเพณี throw new Exception('Some Message')- 419 ประเพณี throw Mage::exception('Vendor_Module', 'Some Message')- 94 ประเพณี (จำเป็นต้องสร้างVendor_Module_Exceptionชั้นเรียน)

4
รับ URL ผลิตภัณฑ์จาก id อย่างมีประสิทธิภาพ
วิธีที่มีประสิทธิภาพมากที่สุดในการรับ URL ของผลิตภัณฑ์คือ ID คืออะไร ในบางแห่งในรหัสของเราเรามีสิ่งต่าง ๆ เช่นMage::getModel('catalog/product')->load($id)->getProductUrl()เพื่อให้ได้ URL ของผลิตภัณฑ์เนื่องจากจำนวนของกิจกรรมและอื่น ๆ ที่เกี่ยวข้องกับผลิตภัณฑ์ที่ดูเหมือนจะค่อนข้างสิ้นเปลืองมีวิธีที่ง่ายกว่าไหม ความสามารถในการระบุรหัสหมวดหมู่ก็ดีเช่นกัน นอกจากนี้มีวิธีที่มีประสิทธิภาพในการทำสิ่งเดียวกันสำหรับแอตทริบิวต์เดียวสำหรับผลิตภัณฑ์เช่นชื่อหรือไม่

4
ส่งคืน $ นี้หลังจากผู้สังเกตการณ์
ฉันเห็นข้อมูลที่ขัดแย้งกันบนอินเทอร์เน็ตและในโมดูลของบุคคลที่สามเหมือนกัน - มันเป็นข้อกำหนดหรือวิธีปฏิบัติที่ดีที่สุดในการกลับมา$thisที่จุดสิ้นสุดของวิธีการสังเกตการณ์หรือไม่? เช่น: MyCompany_Module_Model_Observer.php public function salesOrderSaveAfter($observer){ //do stuff return $this; }


2
Magento 2 - แนวปฏิบัติที่ดีในการใช้ / หลีกเลี่ยง Magic getters?
Magic getters on Varien_Object(M1) และDataObject(M2) เป็นเรื่องธรรมดา แต่ด้วย Magento 2 มันรู้สึกผิดที่จะใช้มัน ดี: ง่ายต่อการอ่าน / เขียน ไม่ดี มันทำให้เกิดปัญหาเมื่อใช้ตัวเลขในคีย์ (ดู: วีโอไอพี 2: วิธีที่แตกต่างกันในการรับฟิลด์ของคอลเลกชันหรือรับคุณสมบัติของผลิตภัณฑ์ที่กำหนดเองโดยใช้เคสอูฐ ) เครื่องมือวิเคราะห์รหัสบ่นเกี่ยวกับวิธีการที่ไม่มีอยู่ คำถาม ด้วย Magento 2 เรามีสองวิธีใหม่: getDataByKey($key) getDataByPath($path) มีเหตุผลที่ดีที่จะยังคงใช้getData($key)หรือผู้ได้รับเวทมนตร์? แก้ไข: @Vinai ขอบคุณ ฉันไม่ได้พูดถึง@methodวิธีการเพราะวิธีการของฉันแตกต่างกันมาก มันช่วย IDE เท่านั้น แต่ไม่มีผลกระทบต่อสิ่งอื่น มีการรวม PR หลาย ๆ อันที่เป็น "การปรับให้เหมาะสมที่สุดของไมโคร" อย่างที่ต้องการ(int)แทนintval()หรือรับขนาดของอาเรย์ภายนอกลูป (แม้กระทั่งสำหรับอาเรย์ขนาดเล็ก) ในทางกลับกันมี ผู้ได้รับเวทมนตร์ที่มี "ค่าใช้จ่าย" ตามที่ …

2
Magento 2 DI best practice
สมมติว่าฉันกำลังสร้างส่วนเสริม Magento 2 ที่ทำได้ .... ก็ดี ... ไม่สำคัญ สมมติว่ามันทำสิ่งที่ยอดเยี่ยมที่สุด แต่ฉันต้องการตรวจสอบให้แน่ใจว่านี่คือการสร้างโดยใช้มาตรฐานที่เหมาะสมเพื่อให้นักพัฒนารายอื่นสามารถขยายได้ เมื่อใดที่ฉันควรใช้ DI ร่วมกับส่วนต่อประสานและเมื่อใดที่ฉันไม่ควรใช้ เพื่อให้ชัดเจนนี่คือตัวอย่างหลัก ชั้นเรียนMagento\Core\Helper\Dataมีตัวสร้างเช่นนี้: public function __construct( \Magento\Framework\App\Helper\Context $context, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\App\State $appState, PriceCurrencyInterface $priceCurrency, $dbCompatibleMode = true ) { parent::__construct($context); $this->_scopeConfig = $scopeConfig; $this->_storeManager = $storeManager; $this->_appState = $appState; $this->_dbCompatibleMode = $dbCompatibleMode; $this->_priceCurrency = $priceCurrency; } …

5
แนวปฏิบัติที่ดีที่สุดสำหรับการติดตั้งส่วนขยายของบุคคลที่สามใน Magento 2 คืออะไร
ขณะทำงานในโครงการลูกค้าสำหรับ Magento 2 - ฉันได้ค้นพบวิธีการมากมายในการโหลดและติดตามส่วนขยายของบุคคลที่สาม เมื่อพิจารณาตามนี้สมมติว่าเรากำลังใช้วิธีการติดตั้งรวม (ผู้แต่ง!) แนวทางปฏิบัติที่ดีที่สุดสำหรับการจัดการส่วนขยายของบุคคลที่สามคืออะไร จนถึงตอนนี้ทุกส่วนขยายที่ฉันซื้อหรือดาวน์โหลดมีไฟล์ composer.json ของตัวเอง - และฉันรู้ว่าผู้เขียนส่วนขยายอย่างน้อยสามวิธีจะแนะนำให้ติดตั้งส่วนขยาย: คัดลอกไฟล์เหล่านี้ลงในแอพ / รหัส คัดลอกซิปนี้ไปยังโฟลเดอร์เพิ่มเป็นที่เก็บสิ่งประดิษฐ์และจำเป็นต้องใช้ เพิ่มที่เก็บออนไลน์นี้ (พร้อม / ไม่รับรองความถูกต้อง) และต้องการมัน จนถึงตอนนี้ฉันได้เจอ 1 & 2 และฉันก็สงสัยว่า # 3 มีอยู่จริง แต่จากนั้นสังเกตว่าคนที่แนะนำ # 1 ฉันพบว่าคุณสามารถมีพื้นที่เก็บข้อมูล "เส้นทาง" - ย้ายส่วนขยายของฉันจาก app / รหัสไปยังโฟลเดอร์เดียวกันฉันตัดสินใจที่จะใส่สิ่งประดิษฐ์เหล่านี้และต้องการมันอย่างนั้น ในกระบวนการนี้การกำหนดค่าที่เก็บของฉันดูเหมือน: "repositories": { "0": { "type": "composer", "url": "https://repo.magento.com/" }, …

4
Magento 2 แนวปฏิบัติที่ดีที่สุดสำหรับสถานที่เรียนและชื่อ
ในMagento 1เราถูกใช้เพื่อวางชั้นเรียนของเราในไดเรกทอรีเหล่านี้ บล็อก ผู้ช่วย แบบ ทรัพยากร และใช้ชื่อคลาสแบบง่าย ๆ โดยไม่มีอักษรตัวใหญ่อยู่กลางชื่อ ถ้าเรามาดูบางกรณีใน Magento 2 Core ผู้ช่วย ที่ตั้ง : - \Foo\Bar\Helper ชื่อ : - *.php ตัวอย่าง : - \Magento\ImportExport\Helper\Report -\Magento\Cms\Helper\Wysiwyg\Images ผู้สังเกตการณ์ ที่ตั้ง : - \Foo\Bar\Observer ชื่อ : - *.php - *Observer.php ตัวอย่าง : - \Magento\CustomerCustomAttributes\Observer\SalesOrderAddressAfterLoad -\Magento\CustomerBalance\Observer\ProcessBeforeOrderPlaceObserver ปลั๊กอิน ที่อยู่ : - \Foo\Bar\Plugin ชื่อ : …

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 เนื่องจากวิธีนี้เลิกใช้แล้ว แนวปฏิบัติที่ดีบอกว่าคุณต้องใช้ …

1
อะไรคือวิธีปฏิบัติที่ดีที่สุดใน Magento 2 สำหรับการสร้างความสัมพันธ์แบบหลายต่อหลายคน?
ฉันดูรอบแกนกลางและเห็นตัวอย่างของความสัมพันธ์แบบหลายต่อหลายถึงหลายแบบ แต่ฉันไม่เห็นคำตอบที่ชัดเจนเกี่ยวกับเรื่องนี้ ตัวอย่างเช่นสมมติว่าเราสร้างโมเดลใหม่และเราต้องการมีความสัมพันธ์แบบหลายต่อหลายกับตารางผลิตภัณฑ์ที่มีอยู่ ดังนั้นเราจึงมี Model - Stockist ใหม่ของเราและเราสร้าง 2 ตารางดังกล่าวหนึ่งรายการเพื่อเก็บชื่อ Stockist และอีกรายการหนึ่งเพื่อจัดเก็บความสัมพันธ์แบบหลายต่อหลายกับผลิตภัณฑ์ คลาสการตั้งค่าที่ถูกตัดทอน: $table = $setup->getConnection() ->newTable($installer->getTable('stockist')) ->addColumn('stockist_id', \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER, null, ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true], 'Stockist Id') ->addColumn('name', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, null, ['nullable' => false], 'Stockist Name'); $table = $installer->getConnection() ->newTable($installer->getTable('stockist_product')) ->addColumn( 'entity_id', \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER, null, …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.