X

Magento 2: Area code is not set

"Area code is not set" в Magento 2 - довольно распространенная ошибка при написании своих костылей, а так же консольных скриптов, исправить ее можно вот так..

Для собственных поделок

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('memory_limit', '2G');
error_reporting(E_ALL);

require 'app/bootstrap.php';

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();

/** @var  $state \Magento\Framework\App\State */$state = $objectManager->get(\Magento\Framework\App\State::class);
$state->setAreaCode(\Magento\Framework\App\Area::AREA_GLOBAL);

echo 'Мой костыль';

для консольных скриптов

/**
 * @var \Magento\Framework\App\State
 */protected $state;

public function __construct(\Magento\Framework\App\State $state) {
    $this->state = $state;
    parent::__construct();
}

public function execute() {
    $this->state->setAreaCode(\Magento\Framework\App\Area::AREA_GLOBAL);
    ....
}

в других местах, по аналогии.

Area Code может принимать одно из значений определенных в константах класса \Magento\Framework\App\Area

  • const AREA_GLOBAL = 'global';
  • const AREA_FRONTEND = 'frontend';
  • const AREA_ADMINHTML = 'adminhtml';
  • const AREA_DOC = 'doc';
  • const AREA_CRONTAB = 'crontab';
  • const AREA_WEBAPI_REST = 'webapi_rest';
  • const AREA_WEBAPI_SOAP = 'webapi_soap';

И используется тот, который подходит для конкретного контекста (global = общий, frontend = клиентская область, adminhtml = админка, crontab = крон, webapi = api  и т.д.)

Категории: Magento