Ich habe ein Modul erstellt, das in diesem Beitrag gezeigt wird. Aber mein eigener Controller funktioniert nicht. Ich habe folgende Fehlermeldung erhalten:
Wiederherstellbarer Fehler: Argument 1, das an MP \ MyModule \ Controller \ Index \ CheckUserName :: __ construct () übergeben wird, muss eine Instanz von Magento \ Framework \ App \ Action \ Context sein, die in D aufgerufen wird : \ xampp \ htdocs \ magento2 \ vendor \ magento \ framework \ ObjectManager \ Factory \ AbstractFactory.php in Zeile 97 und definiert in D: \ xampp \ htdocs \ magento2 \ app \ code \ mp \ MyModule \ Controller \ Index \ CheckUserName. PHP in Zeile 35
Hier ist mein 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";
}
}
?>
Hier sind die Fehlermeldungen nach dem Löschen des Ordners var / generation:
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}
magento2
controllers
ClassMP
quelle
quelle
Antworten:
Entfernen Sie nach dem Bereitstellen des Moduls in einer neuen CentOS-Entwicklungsumgebung die Ordner var / di und var / generation und kompilieren Sie di neu, es funktioniert. Davor habe ich eine Win Xampp-Umgebung verwendet. Das verursacht eine Menge Ärger ...
quelle
php bin/magento setup:di:compile
diesen Befehl ausführen , um alles zu erledigen.Ich bin auf dasselbe Problem gestoßen. Nach ein paar Stunden sinnlosen Debuggens und Hämmerns kam ich auf eine Lösung, die für mich gut funktionierte.
Am Ende habe ich alle Aktionsdateinamen und Klassennamen von camel-case umbenannt
Von:
Zu:
quelle
Führen Sie in Ihrem Magento-Stammverzeichnis den folgenden Befehl aus:
php bin/magento setup:di:compile
Dadurch wird die Abhängigkeitsinjektion (DI) erneut kompiliert und Ihr Problem wird behoben.
quelle
Ihre Controller-
CheckUserName.php
Datei sieht wie folgt ausMP / MyModule / Controller / Index / CheckUserName.php
Cache leeren.
Danach können Sie über die folgende URL auf Ihren Controller zugreifen
http://192.168.0.52/m2ee/my_module/index/CheckUserName/ oder http://192.168.0.52/m2ee/index.php/my_module/index/CheckUserName/
Hinweis: my_module ist mein Modul-Frontname. Sie können Ihren Frontnamen hier ersetzen.
siehe Bild unten Meine Seite es funktioniert
Lass es mich wissen, wenn es nicht funktioniert.
quelle