Die Lösung für dieses Problem habe ich schließlich in den Magento Community-Foren gefunden, die von @ dunagan5887 bereitgestellt wurden . Ich habe beschlossen, es hier auf magento.stackexchange.com zu teilen, da viele von einer gut verwiesenen Lösung für diese Ausnahme profitieren können.
Es gibt einen Link zum ursprünglichen Beitrag im Community-Forum: E-Mail-Vorlage mit Block
Es scheint, dass diese Lösung, wie von @ dunagan5887 zitiert ;dictates that the di.xml directive set in vendor/magento/module-developer/etc/adminhtml/di.xml is loaded.
Die Lösung besteht aus dieser einfachen Codezeile:
$ this -> _ objectManager-> configure ($ this -> _ configLoader-> load ('adminhtml'));
Unten finden Sie eine Befehlszeilenklasse für Arbeitsversionen:
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();
}
...
}
Ändern Sie einfach den Bereich von frontend
zu admin
oder global
wie von der Anwendung erforderlich.
[AKTUALISIEREN]
Bereich adminhtml
, der Fehler bei der Bereitstellung statischer Inhalte verursacht
Es scheint, dass das Festlegen des Bereichs aus bestimmten Gründen adminhtml
beim Bereitstellen statischer Inhalte Fehler verursacht.
Wir haben folgende Fehler festgestellt:
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
Ich dachte zunächst, dass dieser Fehler durch ein Tief verursacht werden würde max_allowed_packet
Einstellung für MYSQL aber da das Limit bereits hoch genug war und das Problem dadurch nicht behoben werden konnte, entschied ich mich, weiter zu graben. Nachdem ich einen Eliminierungsprozess durchlaufen hatte, stellte ich schließlich fest, dass dies der Hauptunterschied zwischen zwei Modulen mit ähnlichen Befehlsfunktionen war, von denen eines der Module dieses Problem verursachte, sobald es aktiviert war.
Obwohl ich nicht nach der Quelle dieses Problems oder Konflikts gesucht habe, hielt ich es für eine gute Idee, meine Erkenntnisse hier zu teilen, da andere es möglicherweise nützlich finden.
[UPDATE - 2]
Die richtige Methode:
Nach dem Upgrade von Magento auf 2.2.X haben wir festgestellt, dass dies die richtige Methode zum Festlegen des Bereichs ist:
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
...
}
...
}
Beachten Sie, dass wir den Objektmanager nicht verwenden und dass der Bereich innerhalb der Funktion festgelegt werden muss, die dies erfordert, und NICHT im Konstruktor. Dies ist die offizielle Methode zum Festlegen des Bereichs und sollte mit allen Magento 2-Versionen einwandfrei funktionieren.
Eine Liste der verfügbaren Bereiche ist in der folgenden Klasse verfügbar:
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'));
) NICHT im Konstruktor einer Klasse! Wenn Sie die Konfiguration aus einem anderen Bereich als Ihrem aktuellen Bereich laden, kann dies Magento 2 ernsthaft beschädigen!Magento\Developer\Model\TemplateEngine\Plugin\DebugHints
weil diedebugHintsPath
Variable nicht gesetzt ist. Die Verwendung Ihres Originalcodes zum Laden des ADMINHTML-Bereichs DI funktioniert, oder die manuelle Einstellung derdebugHintsPath
Variablen funktioniert, es können jedoch auch andere defekte Teile vorhanden sein. Dies ist tatsächlich ein "Fehler" in Magento, da es nicht möglich ist, Elemente der Ansichtsebene in der CLI zu verwenden.Da CLI in Magento keinen geeigneten Bereich hat, habe ich die folgende Problemumgehung herausgefunden:
quelle