Pregunta

Justo cuando creo que entiendo el administrador de objetos de Magento 2 y la inyección de dependencia, sucede algo que no entiendo.creo que estoy pasando context es pagefactory objetos pero Magento dice que no.El segundo parece incorrecto.

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 

El controlador:

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

}

Entiende el tipo de insinuación como quiero:

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

pero esta pasando

instance of Magento\Framework\App\ResourceConnection given

¿Por qué es esto?Hay algo de magia con Magento que no entiendo (todavía).

¿Fue útil?

Solución

TL;DR

Si ve un error con Interceptor.php asegúrese de vaciar /var/generation/ antes de mirar más allá.Le ahorrará mucho tiempo.

Explicación

Después de algunas pruebas encontré la causa subyacente.Al ejecutar un controlador personalizado por primera vez, Magento genera archivos automáticamente.Hasta ahora, todo bien.En mi caso solo uno.esta viviendo en var\generation\ La ruta completa en este ejemplo sería var\generation\Demo\Hello\Controller\Adminhtml\Order\MassPrint\Interceptor.php.

Esta clase amplía su controlador personalizado.Entonces, naturalmente, está llamando al constuctor padre en su propio constuctor.Entonces, si realiza cambios en el constructor de su controlador, este archivo debe regenerarse para que coincida con su nuevo código.Si no lo hace, producirá resultados no deseados.Así que asegúrese de eliminar al menos la clase Interceptor para ese controlador.Más fácil sería vaciar todo el director para que Magento regenere todos los archivos que coincidan con su nuevo código.

rm -rf var/generation/*

En realidad, magento da una muy buena pista sobre dónde buscar en la última parte del mensaje de error.

called in /var/generation/Demo/Hello/Controller/Adminhtml/Order/MassPrint/Interceptor.php on line 15
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top