Magento2 - कस्टम नियंत्रक त्रुटि फेंकता है


12

मैंने इस पोस्ट में दिखाया गया एक मॉड्यूल बनाया । लेकिन मेरा अपना नियंत्रक काम नहीं करता है। मुझे यह त्रुटि संदेश मिला है:

पुनर्प्राप्त करने योग्य त्रुटि: MP \ MyModule \ Controller \ Index \ CheckUserName :: __ का निर्माण करने के लिए तर्क 1 उत्तीर्ण किया गया :: __ निर्माण () Magento के 'फ्रेमवर्क' का एक उदाहरण होना चाहिए \ App \ Action \ Context, Magento के फ्रेमवर्क \ ObjectManager \ ObjectManager का उदाहरण, डी में बुलाया : \ xampp \ htdocs \ magento2 \ seller \ magento \ फ्रेमवर्क \ ObjectManager \ Factory \ AbstractFactory.php लाइन 97 पर और डी में परिभाषित किया गया: \ xampp \ htdocs \ magento2 \ app \ कोड \ mp \ MyModule \ नियंत्रक \ सूचकांक \ CheckUserName। लाइन 35 पर php

यहाँ मेरा नियंत्रक कोड है:

<?php
namespace MP\MyModule\Controller\Index;

class CheckUserName extends \Magento\Framework\App\Action\Action
{
    protected $_logger;
    protected $_objectManager;
    protected $_request;

/*
            \Psr\Log\LoggerInterface $logger, //log injection
            \Magento\Framework\App\Request\Http $request

        $this->_logger = $logger;

        $this->_logger->debug('CheckUserName_Constructor_Begin');

        $this->_request = $request;

        $this->_logger->debug('CheckUserName_Constructor_End');     


        */  

        /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory resultPageFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory
    )
    {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute()
    {
        echo "Hello from Checkusername";
    }    
}
 ?>

यहाँ var / पीढ़ी फ़ोल्डर को हटाने के बाद त्रुटि संदेश हैं:

Warning: ltrim() expects parameter 1 to be string, object given in D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator\EntityAbstract.php on line 152

Notice: Uninitialized string offset: 0 in D:\xampp\htdocs\magento2\vendor\magento\framework\Autoload\ClassLoaderWrapper.php on line 81

Notice: Uninitialized string offset: 0 in D:\xampp\htdocs\magento2\vendor\composer\ClassLoader.php on line 317

Notice: Uninitialized string offset: 0 in D:\xampp\htdocs\magento2\vendor\composer\ClassLoader.php on line 349 exception 'Magento\Framework\Exception\LocalizedException' with message 'Source class "" for "Magento\Framework\App\Response\Http\Interceptor" generation does not exist.' in D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator.php:171 Stack trace: #0 D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator.php(100): Magento\Framework\Code\Generator->tryToLoadSourceClass('Magento\\Framewo...', Object(Magento\Framework\Interception\Code\Generator\Interceptor))
#1 D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator\Autoloader.php(35): Magento\Framework\Code\Generator->generateClass('Magento\\Framewo...')
#2 [internal function]: Magento\Framework\Code\Generator\Autoloader->load('Magento\\Framewo...')
#3 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\AbstractFactory.php(105): spl_autoload_call('Magento\\Framewo...')
#4 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\Compiled.php(88): Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject('Magento\\Framewo...', Array)
#5 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\Compiled.php(130): Magento\Framework\ObjectManager\Factory\Compiled->create('Magento\\Framewo...')
#6 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\Compiled.php(67): Magento\Framework\ObjectManager\Factory\Compiled->get('Magento\\Framewo...')
#7 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\ObjectManager.php(57): Magento\Framework\ObjectManager\Factory\Compiled->create('Magento\\Framewo...', Array)
#8 D:\xampp\htdocs\magento2\vendor\magento\framework\App\Bootstrap.php(233): Magento\Framework\ObjectManager\ObjectManager->create('Magento\\Framewo...', Array)
#9 D:\xampp\htdocs\magento2\index.php(38): Magento\Framework\App\Bootstrap->createApplication('Magento\\Framewo...')
#10 {main}

1
@ कैलास सांसद अपने __कंस्ट्रक्शन फ़ंक्शन पर टिप्पणी करें और फिर दोबारा जांच करें। और अपने magento var dir से पीढ़ी फ़ोल्डर को भी हटा दें
Shaheer Ali

हाय शहीर दुर्भाग्य से इस मुद्दे को ठीक नहीं करते।
कक्षा जीएम

क्या आपने पीढ़ी फ़ोल्डर को हटा दिया है?
शहीर अली

क्या आप / var / पीढ़ी फ़ोल्डर का मतलब है? पीढ़ी फ़ोल्डर में सामग्री कैसे उत्पन्न होगी? क्या मुझे "मैगेंटो सेटअप: डीआई: संकलन" के साथ फिर से जुड़ना चाहिए?
कक्षा एमपी

हां मेरा मतलब है कि M2 प्री रन टाइम में फैक्ट्री फाइल्स जेनरेट करता है। नहीं, आपको
पुनर्मिलन

जवाबों:


18

नए CentOS देव वातावरण पर मॉड्यूल को तैनात करने के बाद, var / di और var / पीढ़ी फ़ोल्डर और recompile di निकालें, यह काम करता है। इससे पहले मैंने विन ज़मपप पर्यावरण का उपयोग किया था। जिसके कारण बहुत परेशानी होती है ...


2
इस काम की पुष्टि कर सकते हैं, यह एक दर्द है जो आपको करना है कि जब भी एक नया मार्ग जोड़ते हैं
एलेक्स

1
क्या यह वास्तव में एक CentOS ही मुद्दा है?
मीर

2
@ यह एक OS मुद्दा नहीं है। @ जब भी आप निर्भरता इंजेक्शन पर कुछ बदलाव करते हैं, तो आपको बस php bin/magento setup:di:compileयह कमांड चलाना होगा कि वह सब कुछ करेगा।
नाहिद

7

मैं उसी मुद्दे में भाग गया। निरर्थक डिबगिंग और दीवार से अपना सिर पीटने के कुछ घंटों के बाद मैं एक समाधान के साथ आया जो मेरे लिए अच्छी तरह से काम करता है।

अंत में मैंने ऊँट-केस से सभी एक्शन फ़ाइल नामों और वर्ग नामों का नाम बदल दिया

से:

डी: \ XAMPP \ htdocs \ magento2 \ एप्लिकेशन \ कोड \ mp \ MyModule \ नियंत्रक \ सूचकांक \ CheckUserName.php

<?php
namespace MP\MyModule\Controller\Index;

class CheckUserName extends \Magento\Framework\App\Action\Action {
...
}

सेवा:

डी: \ XAMPP \ htdocs \ magento2 \ एप्लिकेशन \ कोड \ mp \ MyModule \ नियंत्रक \ सूचकांक \ Checkusername.php

class Checkusername extends \Magento\Framework\App\Action\Action {
...
}

क्या यह Magento2 के नवीनतम संस्करण के साथ कुछ करना है? मेरे पास मेरे स्थानीय परिवेश में बिना किसी मुद्दे के साथ चल रहा है, हालांकि जब मैं डी कंपाइलर चलाता हूं तो यह समस्या आती है।
अविका

यह सर्वर वातावरण के साथ कुछ करना है। अपने अनुभव से, जब मैं विंडोज पर मॉड्यूल विकसित करता हूं (या मैक हाल ही में) मेरे पास ऊंट-केस फ़ाइल नाम और वर्ग के नाम के साथ समस्या नहीं है, लेकिन अधिकांश लिनक्स डिस्ट्रोस के तहत मैं इन समस्याओं में भाग लेता हूं, इसलिए मुझे यह आसान लगता है केवल पहले बताई गई फाइलों और कक्षाओं को नाम दें।
ज़ान कोलेव

मुझे पूरा यकीन है कि यह मुद्दा विंडोज कमजोर रूप से टाइप किया गया है, जिसका अर्थ है कि 'CheckUserName.php' को 'Checkusername.php' के समान माना जाता है। हालांकि लिनक्स दृढ़ता से टाइप किया गया है जिसका अर्थ है 'CheckUserName.php' और 'Checkusername.php' दो पूरी तरह से अलग चीजें हैं। मैं समय-समय पर एक ही मुद्दे पर चलता हूं क्योंकि मैं विंडोज पर अपना विकास करता हूं और सेंटोस पर परीक्षण करता हूं।
माइक लेवी

7

अपने Magento रूट डायरेक्टरी से निम्नलिखित कमांड चलाएं:

php bin/magento setup:di:compile

यह निर्भरता इंजेक्शन (DI) को फिर से संकलित करेगा और, आपकी समस्या दूर हो जाएगी।


मैंने उस आदेश को सफलतापूर्वक चलाया, यह कहा, और इसने पूरी खरीदारी की गाड़ी को दोनों व्यवस्थापक और त्रुटि के साथ बंद कर दिया, "स्ट्रीम को खोलने में विफल रहा: / var / www / html / mangento2 / विक्रेता / colinmollenh / कैश-बैकेंड में अनुमति से इनकार कर दिया। -file / File.php। इसमें व्यवस्थापक और दृश्यपटल में एक ही त्रुटि थी।
वेक्टरपोर्ट

फिर मैंने कमांड को फिर से चलाया, और शॉपिंग कार्ट के दोनों हिस्से अपने सामान्य व्यवहार पर लौट आए।
वेक्टरवॉर्ट

0

आपकी नियंत्रक CheckUserName.phpफ़ाइल नीचे की तरह दिखती है

सांसद / MyModule / नियंत्रक / सूचकांक / CheckUserName.php

<?php
namespace MP\MyModule\Controller\Index;

class CheckUserName extends \Magento\Framework\App\Action\Action
{

    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory resultPageFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory
    )
    {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute()
    {
        echo "Hello from Check username";
    }

}

कैश साफ़ करें।

उसके बाद आप नीचे दिए गए URL का उपयोग करके अपने कंट्रोलर तक पहुँच सकते हैं

http://192.168.0.52/m2ee/my_module/index/CheckUserName/ या http://192.168.0.52/m2ee/index.php/my_module/index-CheckUserName/

नोट: my_module मेरा मॉड्यूल फ्रंट नाम है, आप यहां अपना फ्रंट नाम बदल सकते हैं।

तस्वीर के नीचे देखें मेरी तरफ से यह काम कर रहा है

यहाँ छवि विवरण दर्ज करें

मुझे पता है अगर यह काम नहीं कर रहा है।

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