Saya akhirnya menemukan solusi untuk masalah ini di Forum Komunitas Magento, yang disediakan oleh @ dunagan5887 . Saya memutuskan untuk membagikannya di sini di magento.stackexchange.com karena banyak orang dapat mengambil manfaat dari solusi yang dirujuk dengan baik untuk pengecualian ini.
Ada tautan ke pos Forum Komunitas asli: Template email dengan blok
Tampaknya solusi ini, seperti dikutip oleh @ dunagan5887 ;dictates that the di.xml directive set in vendor/magento/module-developer/etc/adminhtml/di.xml is loaded.
Solusi Terdiri dari Baris Kode Sederhana ini:
$ this -> _ objectManager-> configure ($ this -> _ configLoader-> load ('adminhtml'));
Temukan kelas baris perintah versi yang berfungsi di bawah:
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();
}
...
}
Cukup ganti area dari frontend
ke admin
atau global
sesuai kebutuhan oleh aplikasi Anda.
[MEMPERBARUI]
Area yang adminhtml
menyebabkan kesalahan penggunaan konten statis
Tampaknya karena beberapa alasan mengatur area ke adminhtml
menyebabkan beberapa kesalahan saat menyebarkan konten statis.
Kami melihat kesalahan seperti berikut:
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
Saya awalnya berpikir bahwa kesalahan ini akan disebabkan oleh max_allowed_packet
pengaturan yang rendah untuk MYSQL tetapi karena batasnya sudah cukup tinggi dan meningkatkannya tidak menyelesaikan masalah, saya memutuskan untuk menggali lebih jauh. Setelah melalui proses eliminasi saya akhirnya menemukan bahwa ini adalah perbedaan utama antara dua modul menggunakan fungsi perintah yang sama, dari mana salah satu modul menyebabkan masalah ini segera setelah diaktifkan.
Meskipun saya belum menggali untuk menemukan sumber masalah atau konflik ini, saya pikir akan lebih baik untuk berbagi temuan saya di sini karena orang lain mungkin merasa berguna.
[PEMBARUAN - 2]
Metode yang tepat:
Setelah memutakhirkan Magento ke 2.2.X kami menyadari bahwa ini adalah metode yang tepat untuk mengatur area:
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
...
}
...
}
Perhatikan bahwa kami tidak menggunakan Object Manager dan bahwa area tersebut harus diatur dalam fungsi yang membutuhkannya dan BUKAN dalam konstruktor. Ini adalah cara resmi pengaturan area dan harus bekerja dengan sempurna dengan semua versi Magento 2.
Daftar area yang tersedia tersedia di kelas berikut:
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'));
) di konstruktor kelas! Jika Anda melakukannya dan memuat konfigurasi dari area yang berbeda dari area Anda saat ini, ini dapat merusak Magento 2!Magento\Developer\Model\TemplateEngine\Plugin\DebugHints
karenadebugHintsPath
variabel tidak disetel. Menggunakan kode asli Anda untuk memuat area ADMINHTML konfigurasi DI berfungsi, atau secara manual mengaturdebugHintsPath
variabel berfungsi, tetapi mungkin ada bagian yang rusak lainnya. Ini sebenarnya adalah "bug" di Magento, karena tidak mungkin menggunakan elemen tampilan layer di CLI.Karena CLI di Magento tidak memiliki area yang sesuai, saya menemukan solusi berikut:
sumber