Ho finalmente trovato la soluzione a questo problema nei forum della community di Magento, forniti da @ dunagan5887 . Ho deciso di condividerlo qui su magento.stackexchange.com poiché molti potrebbero beneficiare di una soluzione ben riferita a questa eccezione.
C'è un link al post originale del forum della community: modello di email con blocco
Sembra che questa soluzione, come citato da @ dunagan5887 ;dictates that the di.xml directive set in vendor/magento/module-developer/etc/adminhtml/di.xml is loaded.
La soluzione consiste in questa semplice riga di codice:
$ This -> _ objectManager-> Configura ($ this -> _ configLoader-> load ( 'adminhtml'));
Di seguito trovi una classe della riga di comando della versione funzionante:
app / code / namespace / modulo / 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();
}
...
}
È sufficiente modificare l'area da frontend
a admin
o global
come richiesto dall'applicazione.
[AGGIORNARE]
Area che adminhtml
causa errori di distribuzione del contenuto statico
Sembra che per alcuni motivi l'impostazione dell'area adminhtml
sia causa alcuni errori durante la distribuzione di contenuti statici.
Abbiamo riscontrato errori come i seguenti:
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
Inizialmente pensavo che questo errore sarebbe stato causato da un'impostazione bassa max_allowed_packet
per MYSQL ma dato che il limite era già abbastanza alto e aumentandolo non si stava risolvendo il problema, ho deciso di approfondire. Dopo aver attraversato un processo di eliminazione ho finalmente scoperto che questa era la differenza principale tra due moduli che utilizzavano funzioni di comando simili, da cui uno dei moduli stava causando questo problema non appena abilitato.
Anche se non ho scavato per trovare la fonte di questo problema o conflitto, ho pensato che sarebbe stata una buona idea condividere qui i miei risultati poiché altri potrebbero trovarlo utile.
[AGGIORNAMENTO - 2]
Il metodo giusto:
Dopo aver aggiornato Magento a 2.2.X ci siamo resi conto che questo è il metodo giusto per impostare l'area:
app / code / namespace / modulo / 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
...
}
...
}
Si noti che non utilizziamo l'Object Manager e che l'area deve essere impostata all'interno della funzione che lo richiede e NON nel costruttore. Questo è il modo ufficiale di impostare l'area e dovrebbe funzionare perfettamente con tutte le versioni di Magento 2.
Un elenco delle aree disponibili è disponibile nella seguente classe:
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';
...