Finalmente encontré la solución a este problema en los foros de la comunidad de Magento, proporcionados por @ dunagan5887 . Decidí compartirlo aquí en magento.stackexchange.com ya que muchos pueden beneficiarse de una solución bien referida a esta excepción.
Hay un enlace a la publicación original del Foro de la comunidad: plantilla de correo electrónico con bloque
Parece que esta solución, según lo citado por @ dunagan5887 ;dictates that the di.xml directive set in vendor/magento/module-developer/etc/adminhtml/di.xml is loaded.
La solución consiste en esta simple línea de código:
$ this -> _ objectManager-> configure ($ this -> _ configLoader-> load ('adminhtml'));
Busque una clase de línea de comando de versión funcional a continuación:
app / code / NameSpace / Module / Console / Command.php
<?php
namespace NameSpace\Module\Console\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Magento\Framework\Exception\LocalizedException;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class CustomCommandClass extends Command
{
public function __construct(
\Magento\Framework\App\State $state,
\Magento\Framework\ObjectManagerInterface $objectManager,
\Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader
) {
$state->setAreaCode('frontend'); //SET CURRENT AREA
$objectManager->configure($configLoader->load('frontend')); //SOLUTION
parent::__construct();
}
...
}
Basta con cambiar el área de frontend
a admin
, o global
según lo requiera su aplicación.
[ACTUALIZAR]
Área que adminhtml
causa errores de despliegue de contenido estático
Parece que, por algunas razones, establecer el área en adminhtml
está causando algunos errores al implementar contenido estático.
Estábamos viendo errores como los siguientes:
Fatal error: Uncaught Exception: Warning: Error while sending QUERY packet. PID=22912 in ../magento/vendor/magento/zendframework1/library/Zend/Db/Statement/Pdo.php on line 228 in ../magento/vendor/magento/framework/App/ErrorHandler.php:61
Inicialmente pensé que este error sería causado por una max_allowed_packet
configuración baja para MYSQL pero como el límite ya era lo suficientemente alto y aumentarlo no estaba resolviendo el problema, decidí profundizar más. Después de pasar por un proceso de eliminación, finalmente descubrí que esta era la principal diferencia entre dos módulos que usaban funciones de comando similares, de los cuales uno de los módulos estaba causando este problema tan pronto como estaba habilitado.
Aunque no he cavado para encontrar la fuente de este problema o conflicto, pensé que sería una buena idea compartir mis hallazgos aquí, ya que otros pueden encontrarlo útil.
[ACTUALIZACIÓN - 2]
El método correcto:
Después de actualizar Magento a 2.2.X nos dimos cuenta de que este es el método correcto para configurar el área:
app / code / NameSpace / Module / Console / Command.php
<?php
namespace NameSpace\Module\Console\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Magento\Framework\Exception\LocalizedException;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class CustomCommandClass extends Command
{
public function __construct(
\Magento\Framework\App\State $state,
) {
$this->_appState = $appState;
parent::__construct();
}
...
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->_appState->setAreaCode(\Magento\Framework\App\Area::AREA_GLOBAL); //SET CURRENT AREA
...
}
...
}
Tenga en cuenta que no utilizamos el Administrador de objetos y que el área debe establecerse dentro de la función que lo requiere y NO en el constructor. Esta es la forma oficial de configurar el área y debería funcionar perfectamente con todas las versiones de Magento 2.
Una lista de las áreas disponibles está disponible en la siguiente clase:
Magento \ Framework \ App \ Area
class Area implements \Magento\Framework\App\AreaInterface
{
const AREA_GLOBAL = 'global';
const AREA_FRONTEND = 'frontend';
const AREA_ADMIN = 'admin';
const AREA_ADMINHTML = 'adminhtml';
const AREA_DOC = 'doc';
const AREA_CRONTAB = 'crontab';
const AREA_WEBAPI_REST = 'webapi_rest';
const AREA_WEBAPI_SOAP = 'webapi_soap';
...
$objectManager->configure($configLoader->load('frontend'));
) en el constructor de una clase! Si lo hace y carga la configuración desde un área diferente a su área actual, ¡esto puede romper seriamente Magento 2!Magento\Developer\Model\TemplateEngine\Plugin\DebugHints
porque ladebugHintsPath
variable no está establecida. Usar su código original para cargar el área ADMINHTML de configuración DI funciona, o configurar manualmente ladebugHintsPath
variable funciona, pero puede haber otras partes rotas. Esto es en realidad un "error" en Magento, porque no es posible usar elementos de capa de vista en la CLI.Como CLI en Magento no tiene un área apropiada, descubrí la siguiente solución:
fuente