Finalmente encontrei a solução para esse problema nos Fóruns da comunidade Magento, fornecidos por @ dunagan5887 . Decidi compartilhá-lo aqui no magento.stackexchange.com, pois muitos podem se beneficiar de uma solução bem referida para essa exceção.
Há um link para a postagem original do fórum da comunidade: Modelo de email com bloco
Parece que esta solução, conforme citado por @ dunagan5887 ;dictates that the di.xml directive set in vendor/magento/module-developer/etc/adminhtml/di.xml is loaded.
A solução consiste nesta linha de código simples:
$ this -> _ objectManager-> configure ($ this -> _ configLoader-> load ('adminhtml'));
Encontre uma classe de linha de comando da versão funcional abaixo:
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();
}
...
}
Simplesmente altere a área de ou frontend
para a aplicação.admin
global
[ATUALIZAR]
Área adminhtml
causando erros de implantação de conteúdo estático
Parece que, por alguns motivos, a configuração da área adminhtml
está causando alguns erros ao implantar conteúdo estático.
Estávamos vendo erros como os seguintes:
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, pensei que esse erro seria causado por uma max_allowed_packet
configuração baixa para o MYSQL, mas como o limite já era alto o suficiente e aumentá-lo não estava resolvendo o problema, decidi ir além. Depois de passar por um processo de eliminação, finalmente descobri que essa era a principal diferença entre dois módulos usando funções de comando semelhantes, das quais um dos módulos estava causando esse problema assim que ativado.
Embora não tenha procurado a fonte desse problema ou conflito, achei que seria uma boa idéia compartilhar minhas descobertas aqui, pois outras pessoas podem achar útil.
[ATUALIZAÇÃO - 2]
O método certo:
Depois de atualizar o Magento para 2.2.X, percebemos que este é o método certo para definir a á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
...
}
...
}
Observe que não fazemos uso do Gerenciador de objetos e que a área deve ser definida dentro da função que requer isso e NÃO no construtor. Esta é a maneira oficial de definir a área e deve funcionar perfeitamente com todas as versões do Magento 2.
Uma lista das áreas disponíveis está disponível na seguinte classe:
Magento \ Framework \ App \ Área
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';
...