Magento2 में एक मॉडल को तुरंत कैसे शुरू करें?


14

वहाँ Magento2 के रूप में कुछ सरल करने का एक तरीका है?

मैगेंटो 2 में कॉल फंक्शन

$model = Mage::getModel('cms/page');

प्रश्न अधिक जानकारी के डाल स्पष्ट नहीं है ....
अमित बेरा

जवाबों:


28

Magento सख्ती से सीधे ObjectManager के उपयोग को हतोत्साहित करता है। यह सेवा वर्ग प्रदान करता है जो इसे सभी परिदृश्यों के लिए अलग करता है।

सभी गैर-इंजेक्शन (मॉडल) के लिए आपको कारखाने का उपयोग करना होगा:

संरक्षित $ pageFactory;

सार्वजनिक समारोह
{
    $ यह-> पेजफैक्टी = $ पेजफैक्टिंग;
}

सार्वजनिक समारोह someFunc ()
{
    ...
    $ पेज = $ यह-> पेजफैक्टरी-> बनाएं ();
    ...
}

आपको बस इतना करना है कि कंस्ट्रक्टर में वांछित मॉडल का कारखाना पूछना है। जब आप Magento या कंपाइलर चलाते हैं तो यह अपने आप जेनरेट हो जाएगा।


11

आप इसे इस तरह से कर सकते हैं:

$model = $this->_objectManager->create('Full\Model\Class\Name\Here');

लेकिन आपको यह सुनिश्चित करना होगा कि _objectManagerसदस्य मौजूद है।

अधिकांश वर्गों में यह होना चाहिए, लेकिन अगर यह इसे निर्माता में इंजेक्ट नहीं करता है। ऐशे ही:

protected $_objectManager;
public function __construct(
   ...,
   \Magento\Framework\ObjectManager $objectManager,
   ....
){
    ....
    $this->_objectManager= $objectManager;
    ....
}

[एक साल बाद संपादित करें]
भले ही उत्तर ऊपर काम करता हो, यह सबसे अच्छा अभ्यास नहीं है। इसे करने के सही तरीके के लिए एंटोन का जवाब देखें।


त्रुटि मिली - क्लास मैगेंटो \ फ्रेमवर्क \ ऑब्जेक्ट मैनजर मौजूद नहीं है
अनस मंसूरी

5

तकनीकी तौर पर अगर आपके पास इसका उदाहरण है तो \Magento\Framework\ObjectManagerआप कॉल कर सकते createहैं getऔर इससे आपको मनचाही वस्तु मिल जाएगी। लेकिन यह वास्तव में इस बात पर निर्भर करता है कि आप इसका उपयोग कहां करना चाहते हैं क्योंकि मैगेंटो 2 कंस्ट्रक्टर के माध्यम से निर्भरता इंजेक्शन की ओर जाता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.