Domanda

Proprio quando penso di cogliere il Magento 2 Object Object Manager e l'iniezione di dipendenza Qualcosa accade che non capisco.Penso di passare context en pagefactory Objects ma Magento dice che non lo sono.Il secondo sembra sbagliato.

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 
.

Il 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);
  }

}
.

Comprende il tipo che suggerisce come voglio:

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

Ma sta passando

instance of Magento\Framework\App\ResourceConnection given
.

Perché è questo?C'è qualche magia in corso con Magento che non capisco (ancora).

È stato utile?

Soluzione

tl; DR

Se vedi un errore con Interceptor.php, assicurarsi di svuotare /var/generation/ prima di sembrare oltre. Ti farà risparmiare un sacco di tempo.

Spiegazione

Dopo alcuni test ho trovato la causa sottostante. Quando si esegue un controller personalizzato per la prima volta Magento genera automaticamente file. Fin qui tutto bene. Nel mio caso solo uno. Sta vivendo in var\generation\ Il percorso completo in questo esempio sarebbe var\generation\Demo\Hello\Controller\Adminhtml\Order\MassPrint\Interceptor.php.

Questa classe sta estendendo il tuo controller personalizzato. Quindi naturalmente sta chiamando il costucro genitore nella sua stessa costanza. Quindi, se apporti modifiche al tuo costruttore del controller, questo file deve essere rigenerato per mach il tuo nuovo codice. Se non lo fai, produrrà risultati indesiderati. Quindi assicurati di eliminare almeno la classe di intercettori per quel controller. Più facile sarebbe svuotare l'intero direttore in modo che Magento rigenerare tutti i file corrispondenti al tuo nuovo codice.

rm -rf var/generation/*
.

In realtà Magento dà un ottimo indizio in cui guardare nell'ultima parte del messaggio di errore.

called in /var/generation/Demo/Hello/Controller/Adminhtml/Order/MassPrint/Interceptor.php on line 15
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top