-
Notifications
You must be signed in to change notification settings - Fork 9.4k
Description
Hi all,
I'm looking for a way to set some configuration values with an InstallData.php
script inside a custom module. My current approach to utilize \Magento\Config\Model\Config
doesn't seem to work:
public function __construct(\Magento\Config\Model\Config $config, \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $themeResourceFactory){
...
}
When executing bin/magento setup:upgrade
it fails with Area code is not set
. The underlying issue seems to be that \Magento\Config\Model\Config
has a dependency to \Magento\Config\Model\Config\Structure
which itself has a dependency to Magento\Config\Model\Config\Structure\Element\Section
which depends on a \Magento\Framework\AuthorizationInterface
. So it tries to start a new session inside SessionManager.php
and obviously dies because Area code is not set
.
[Magento\Framework\Exception\LocalizedException]
Area code is not set
Exception trace:
() at /docker/Source/lib/internal/Magento/Framework/App/State.php:139
Magento\Framework\App\State->getAreaCode() at /docker/Source/lib/internal/Magento/Framework/Session/SessionManager.php:173
Magento\Framework\Session\SessionManager->start() at /docker/Source/lib/internal/Magento/Framework/Session/SessionManager.php:130
Magento\Framework\Session\SessionManager->__construct() at /docker/Source/app/code/Magento/Backend/Model/Auth/Session.php:98
Magento\Backend\Model\Auth\Session->__construct() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:148
Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:89
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:71
Magento\Framework\ObjectManager\ObjectManager->get() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:236
Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:71
Magento\Framework\ObjectManager\ObjectManager->get() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:236
Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:71
Magento\Framework\ObjectManager\ObjectManager->get() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:236
Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:57
Magento\Framework\ObjectManager\ObjectManager->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:238
Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:71
Magento\Framework\ObjectManager\ObjectManager->get() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:236
Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:57
Magento\Framework\ObjectManager\ObjectManager->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:238
Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:71
Magento\Framework\ObjectManager\ObjectManager->get() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:236
Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:71
Magento\Framework\ObjectManager\ObjectManager->get() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:236
Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:57
Magento\Framework\ObjectManager\ObjectManager->create() at /docker/Source/app/code/BOS/Setup/Setup/InstallData.php:19
BOS\Setup\Setup\InstallData->__construct() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:97
Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:89
Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() at /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:57
Magento\Framework\ObjectManager\ObjectManager->create() at /docker/Source/setup/src/Magento/Setup/Model/Installer.php:867
Magento\Setup\Model\Installer->createSchemaDataHandler() at /docker/Source/setup/src/Magento/Setup/Model/Installer.php:1171
Magento\Setup\Model\Installer->getSchemaDataHandler() at /docker/Source/setup/src/Magento/Setup/Model/Installer.php:795
Magento\Setup\Model\Installer->handleDBSchemaData() at /docker/Source/setup/src/Magento/Setup/Model/Installer.php:746
Magento\Setup\Model\Installer->installDataFixtures() at /docker/Source/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php:72
Magento\Setup\Console\Command\UpgradeCommand->execute() at /docker/Source/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:257
Symfony\Component\Console\Command\Command->run() at /docker/Source/vendor/symfony/console/Symfony/Component/Console/Application.php:874
Symfony\Component\Console\Application->doRunCommand() at /docker/Source/vendor/symfony/console/Symfony/Component/Console/Application.php:195
Symfony\Component\Console\Application->doRun() at /docker/Source/lib/internal/Magento/Framework/Console/Cli.php:49
Magento\Framework\Console\Cli->doRun() at /docker/Source/vendor/symfony/console/Symfony/Component/Console/Application.php:126
Symfony\Component\Console\Application->run() at /docker/Source/bin/magento:25
I also tried \Magento\Setup\Model\ConfigModel
, but this fails as well.
PHP Fatal error: Cannot instantiate interface Zend\ServiceManager\ServiceLocatorInterface in /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 73
PHP Stack trace:
PHP 1. {main}() /docker/Source/bin/magento:0
PHP 2. Symfony\Component\Console\Application->run() /docker/Source/bin/magento:25
PHP 3. Magento\Framework\Console\Cli->doRun() /docker/Source/vendor/symfony/console/Symfony/Component/Console/Application.php:126
PHP 4. Symfony\Component\Console\Application->doRun() /docker/Source/lib/internal/Magento/Framework/Console/Cli.php:49
PHP 5. Symfony\Component\Console\Application->doRunCommand() /docker/Source/vendor/symfony/console/Symfony/Component/Console/Application.php:195
PHP 6. Symfony\Component\Console\Command\Command->run() /docker/Source/vendor/symfony/console/Symfony/Component/Console/Application.php:874
PHP 7. Magento\Setup\Console\Command\UpgradeCommand->execute() /docker/Source/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:257
PHP 8. Magento\Setup\Model\Installer->installDataFixtures() /docker/Source/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php:72
PHP 9. Magento\Setup\Model\Installer->handleDBSchemaData() /docker/Source/setup/src/Magento/Setup/Model/Installer.php:746
PHP 10. Magento\Setup\Model\Installer->getSchemaDataHandler() /docker/Source/setup/src/Magento/Setup/Model/Installer.php:795
PHP 11. Magento\Setup\Model\Installer->createSchemaDataHandler() /docker/Source/setup/src/Magento/Setup/Model/Installer.php:1171
PHP 12. Magento\Framework\ObjectManager\ObjectManager->create() /docker/Source/setup/src/Magento/Setup/Model/Installer.php:867
PHP 13. Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:57
PHP 14. Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:89
PHP 15. BOS\Setup\Setup\InstallData->__construct() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:97
PHP 16. Magento\Framework\ObjectManager\ObjectManager->create() /docker/Source/app/code/BOS/Setup/Setup/InstallData.php:19
PHP 17. Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:57
PHP 18. Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
PHP 19. Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
PHP 20. Magento\Framework\ObjectManager\ObjectManager->get() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:236
PHP 21. Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:71
PHP 22. Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
PHP 23. Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
PHP 24. Magento\Framework\ObjectManager\ObjectManager->get() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:236
PHP 25. Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:71
PHP 26. Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:82
PHP 27. Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php:53
PHP 28. Magento\Framework\ObjectManager\ObjectManager->get() /docker/Source/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php:236
PHP 29. Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create() /docker/Source/lib/internal/Magento/Framework/ObjectManager/ObjectManager.php:71
So what is the preferred way to set some config values like currency/options/base
? Is it really necessary to have a dependency to the Auth/Session.php? What would be a proper solution?
I also accidentally discovered that I could work around this by sending some output e.g. having a registration.php
with one empty line which causes isSessionExists
to return true
because
headers_sent
is 1
.
public function isSessionExists()
{
if (session_status() === PHP_SESSION_NONE && !headers_sent()) {
return false;
}
return true;
}
Everything works fine under these circumstances because SessionManager.php:start
does not run into getAreaCode() because it thinks a session already exists.
public function start()
{
if (!$this->isSessionExists()) {
\Magento\Framework\Profiler::start('session_start');
try {
$this->appState->getAreaCode();
...
But this was obviously not intendent. Is there maybe a way to deactivate Session/Authenticate for setup tasks or am I on the wrong track? Any hints are welcome.