Frage

Gerade als ich glaube, den Magento 2-Objektmanager und die Abhängigkeitsinjektion zu verstehen, passiert etwas, das ich nicht verstehe.Ich glaube, ich komme vorbei context de pagefactory Objekte, aber Magento sagt, dass ich es nicht bin.Der zweite scheint falsch.

Recoverable Error: Argument 2 passed to Demo\Hello\Controller\Adminhtml\Order\MassPrint::__construct() must be an instance of Magento\Framework\View\Result\PageFactory, instance of Magento\Framework\App\ResourceConnection given, called in 

Der Controller:

<?php 
namespace Demo\Hello\Controller\Adminhtml\Order;

use Magento\Backend\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;

class MassPrint extends \Magento\Backend\App\Action {

  public function __construct(Context $context, PageFactory $pageFactory) {
    parent::__construct($context);
  }

}

Es versteht die Typangabe so, wie ich es möchte:

must be an instance of Magento\Framework\View\Result\PageFactory

Aber es vergeht

instance of Magento\Framework\App\ResourceConnection given

Warum ist das?Bei Magento geht eine Magie vor sich, die ich (noch) nicht verstehe.

War es hilfreich?

Lösung

TL;DR

Wenn Sie einen Fehler mit sehen Interceptor.php unbedingt entleeren /var/generation/ bevor Sie weiter suchen.Es wird Ihnen viel Zeit sparen.

Erläuterung

Nach einigen Tests fand ich die zugrunde liegende Ursache.Wenn ein benutzerdefinierter Controller zum ersten Mal ausgeführt wird, generiert Magento automatisch Dateien.So weit, ist es gut.In meinem Fall nur eine.Es lebt darin var\generation\ Der vollständige Pfad in diesem Beispiel wäre var\generation\Demo\Hello\Controller\Adminhtml\Order\MassPrint\Interceptor.php.

Diese Klasse erweitert Ihren benutzerdefinierten Controller.Es ruft also natürlich den übergeordneten Konstruktor in seinem eigenen Konstruktor auf.Wenn Sie also Änderungen an Ihrem Controller-Konstruktor vornehmen, muss diese Datei neu generiert werden, um Ihren neuen Code zu erstellen.Wenn Sie dies nicht tun, führt dies zu unerwünschten Ergebnissen.Stellen Sie daher sicher, dass Sie zumindest die Interceptor-Klasse für diesen Controller löschen.Einfacher wäre es, den gesamten Director zu leeren, damit Magento alle Dateien neu generiert, die Ihrem neuen Code entsprechen.

rm -rf var/generation/*

Eigentlich gibt Magento im letzten Teil der Fehlermeldung einen sehr guten Hinweis, wo man suchen muss.

called in /var/generation/Demo/Hello/Controller/Adminhtml/Order/MassPrint/Interceptor.php on line 15
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top