Ich habe eine Controller-Aktion, in die ich das Produkt-Repository einfügen möchte
namespace Nosto\Tagging\Controller\Export;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Backend\App\Action;
use Magento\Framework\App\Action\Context;
class Test extends Action
{
private $_productRepository;
public function __construct(
Context $context,
StoreManagerInterface $storeManager,
ProductRepositoryInterface $productRepository
) {
parent::__construct($context);
$this->_storeManager = $storeManager;
$this->_productRepository = $productRepository;
}
Unabhängig von der Reihenfolge, in der ich meine Konstruktorargumente anordne, injiziert Magentos Abhängigkeitsinjektion immer eine ungültige Klasse für das productRepository
Argument, das PHP veranlasst, Fehler zu werfen und zu argumentieren. Der storeManager
Getd spritzt prima. Das Löschen der Caches hat nicht geholfen.
Hier ist die Ausnahme geworfen:
Recoverable Error: Argument 3 passed to Nosto\Tagging\Controller\Export\Test::__construct() must implement interface Magento\Catalog\Api\ProductRepositoryInterface, instance of Nosto\Tagging\Helper\Account given.
Die Klassennamen und Argumentpositionen in der Fehlermeldung ändern sich, aber die Fehlerdefinition ist immer dieselbe. Wenn Sie das ProductRepositoryInterface
aus dem Konstruktor entfernen, ist alles wieder in Ordnung.
magento2
controllers
dependency-injection
action
Mridang Agarwalla
quelle
quelle
Antworten:
Dies tritt in der Regel auf, wenn Sie dem Konstruktor einen weiteren Parameter hinzufügen, da Magento ihn in var / generation zwischenspeichert. Sie müssen var / generation löschen, wodurch Magento gezwungen wird, den Interceptor neu zu generieren .
quelle
public function __construct( \Magento\Catalog\Api\ProductRepositoryInterface $productRepository, \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Checkout\Model\Session $session, \Custom\Module\Api\ProductRepositoryInterface $unit1ProductRepository, array $data, $justAParameter = "" )
<preference for="Custom\Module\Api\ProductRepositoryInterface" type="Magento\Catalog\Model\ProductRepository" />
php bin/magento setup:upgrade
SieEs ist schwer zu sagen, ohne weitere Details, aber ich gehe davon aus, dass Ihr Codebeispiel tatsächlich so aussieht
dh mit einem PHP-Namespace (da alle Controller in Magento 2 Namespaces haben).
Wenn dies der Fall ist, versuchen Sie in Ihrem Codebeispiel tatsächlich, eine
Packagename\Module\Controller\ProductRepositoryInterface
Klasse zu injizieren . Wenn Sie einen Klassennamen ohne Namespace-Präfix verwenden, geht PHP davon aus, dass Sie eine Klasse im aktuellen Namespace wünschen .quelle
Ich konnte mit dieser Fehlermeldung kein Modul in eine Steuerung einspeisen. Das Löschen von var / generation hat bei mir funktioniert.
quelle
Was bei mir funktioniert hat, ist das Ausführen des Kompilierungsbefehls.
quelle
In magento 2.2 Ordner löschen:
Und das wird das Problem lösen.
quelle