마침내 @ dunagan5887 에서 제공 한 Magento Community Forums에서이 문제에 대한 해결책을 찾았 습니다 . 많은 사람들 이이 예외에 대한 잘 알려진 솔루션의 이점을 누릴 수 있으므로 magento.stackexchange.com 에서 공유하기로 결정했습니다 .
: 원래 커뮤니티 포럼 게시물에 대한 링크가 블록 이메일 템플릿
이 솔루션은 @ dunagan5887에 의해 인용 된 것처럼 보입니다 .dictates that the di.xml directive set in vendor/magento/module-developer/etc/adminhtml/di.xml is loaded.
솔루션은이 간단한 코드 라인으로 구성됩니다.
$ this-> _ objectManager-> configure ($ this-> _ configLoader-> load ( 'adminhtml'));
아래에서 작동하는 버전 명령 행 클래스를 찾으십시오.
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();
}
...
}
간단히에서 영역을 변경 frontend
을 admin
하거나 global
응용 프로그램에서 필요에 따라.
[최신 정보]
adminhtml
정적 컨텐츠 배포 오류를 발생시키는 영역
어떤 이유로 영역을 설정하면 adminhtml
정적 내용을 배포하는 동안 일부 오류가 발생 하는 것 같습니다 .
다음과 같은 오류가 발생했습니다.
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
처음에는이 오류가 max_allowed_packet
MYSQL 에 대한 낮은 설정 으로 인해 발생할 것이라고 생각 했지만 한계가 이미 충분히 높았으며 문제를 해결하지 못했기 때문에 더 자세히 파기로 결정했습니다. 제거 프로세스를 거친 후, 이것이 비슷한 명령 기능을 사용하는 두 모듈의 주요 차이점이라는 것을 알았습니다.이 중 하나가 활성화 되 자마자 모듈 중 하나 가이 문제를 일으켰습니다.
이 문제의 원인이나 갈등을 찾기 위해 발굴하지는 않았지만 다른 사람들이 유용하다고 생각하는 결과를 여기에 공유하는 것이 좋습니다.
[업데이트-2]
올바른 방법 :
Magento를 2.2.X로 업그레이드 한 후 이것이 영역을 설정하는 올바른 방법임을 깨달았습니다.
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
...
}
...
}
우리는 객체 관리자를 사용하지 않으며 영역은 생성자가 아닌 그것을 필요로하는 함수 내에서 설정되어야합니다. 이것은 영역을 설정하는 공식적인 방법이며 모든 Magento 2 버전에서 완벽하게 작동합니다.
사용 가능한 영역 목록은 다음 클래스에서 사용할 수 있습니다.
마 젠토 \ 프레임 워크 \ 앱 \ 영역
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';
...