10

I created a module shown in this post. But my own controller doesn't work. I've got this error message:

Recoverable Error: Argument 1 passed to MP\MyModule\Controller\Index\CheckUserName::__construct() must be an instance of Magento\Framework\App\Action\Context, instance of Magento\Framework\ObjectManager\ObjectManager given, called in D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\AbstractFactory.php on line 97 and defined in D:\xampp\htdocs\magento2\app\code\mp\MyModule\Controller\Index\CheckUserName.php on line 35

Here is my controller code:

<?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";
    }    
}
 ?>

Here're the error messages after deleting the var/generation folder:

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
    @Claas MP comment your __construct function and then check again. and also delete the generation folder from your magento var dir – Shaheer Ali Jan 14 '16 at 9:01
  • Hi Shaheer unfortunately that doestn't fix the issue. – ClassMP Jan 14 '16 at 9:09
  • did you deleted the generation folder? – Shaheer Ali Jan 14 '16 at 9:12
  • No. Do you mean the /var/generation folder? How does the content in the generation folder will be generated? Do I need to recompile with "magento setup:di:compile"? – ClassMP Jan 14 '16 at 9:14
  • yes i mean that. M2 pre generate the factory files at run time. No you not need to recompile – Shaheer Ali Jan 14 '16 at 9:15
18

After deploying the module on a new CentOS dev environment, remove the var/di and var/generation folders and recompile di, it works. Before that I used an Win Xampp environment. That causes a lot of trouble...

  • 2
    Can confirm this works, it's a pain that you have to do that whenever adding a new route – Alex Mar 24 '16 at 14:57
  • 1
    Is this really a CentOS only issue? – Mir Sep 23 '16 at 10:30
  • 2
    @Mir this is not an OS issue. @Alex whenever you make some changes on dependency injection, you just have to run php bin/magento setup:di:compile this command will do everything. – Nahid Apr 17 '17 at 4:48
7

From your Magento root directory run following command:

php bin/magento setup:di:compile

This will compile the Dependency Injection (DI) again and, your issue will go away.

  • I ran that command successfully, it said, and it took down the whole shopping cart both admin and frontend with the error, "failed to open stream: Permission denied in /var/www/html/mangento2/vendor/colinmollenhour/cache-backend-file/File.php. It had the same error in admin and frontend. – VectorVortec Feb 11 '18 at 3:30
  • Then I ran the command, again, and both parts of the shopping cart returned to their normal behavior. – VectorVortec Feb 11 '18 at 3:43
6

I ran into the same issue. After few hours of pointless debugging and banging my head from the wall i came up with a solution that worked well for me.

In the end i renamed all action file names and class names from camel-case i.e.

From:

D:\xampp\htdocs\magento2\app\code\mp\MyModule\Controller\Index\CheckUserName.php

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

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

To:

D:\xampp\htdocs\magento2\app\code\mp\MyModule\Controller\Index\Checkusername.php

class Checkusername extends \Magento\Framework\App\Action\Action {
...
}
  • Does it have something to do with the latest version of Magento2? I have it running on my local environment with no issues, however when I run de compiler is when it comes to that problem. – awavi Dec 22 '16 at 22:53
  • It has something to do with the server environment. From my experience, when i develop module on Windows (or Mac lately) i don't have the issue with the camel-case file names and class names, but under most linux distros i run into these problems, so i find it easier to just name the files and classes as i mentioned earlier. – Zan Kolev Jul 3 '17 at 14:40
  • I'm pretty sure the issue is Windows is weakly typed, meaning 'CheckUserName.php' is treated the same as 'Checkusername.php' in Windows. Linux however is strongly typed meaning 'CheckUserName.php' and 'Checkusername.php' are two entirely different things. I run into the same issues from time to time because I do my developing on Windows and testing on CentOS. – Mike Levy Aug 21 '18 at 15:01
0

Your controller CheckUserName.php file look like below

MP/MyModule/Controller/Index/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";
    }

}

clear the cache.

after that you can access your controller by using below URL

http://192.168.0.52/m2ee/my_module/index/CheckUserName/ or http://192.168.0.52/m2ee/index.php/my_module/index/CheckUserName/

Note: my_module is my module front name you can replace your front name here.

see below pic My side it's working

enter image description here

let me know if it's not working.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.