123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Config\Console\Command\ConfigSet;
- use Magento\Config\App\Config\Type\System;
- use Magento\Config\Model\PreparedValueFactory;
- use Magento\Framework\App\Config\ConfigPathResolver;
- use Magento\Framework\App\Config\Value;
- use Magento\Framework\App\DeploymentConfig;
- use Magento\Framework\Config\File\ConfigFilePool;
- use Magento\Framework\Exception\CouldNotSaveException;
- use Magento\Framework\Stdlib\ArrayManager;
- /**
- * Processes file lock flow of config:set command.
- * This processor saves the value of configuration into app/etc/env.php
- * and locks it for editing in Admin interface.
- *
- * {@inheritdoc}
- */
- class LockProcessor implements ConfigSetProcessorInterface
- {
- /**
- * The factory for prepared value
- *
- * @var PreparedValueFactory
- */
- private $preparedValueFactory;
- /**
- * The deployment configuration writer
- *
- * @var DeploymentConfig\Writer
- */
- private $deploymentConfigWriter;
- /**
- * An array manager for different manipulations with arrays
- *
- * @var ArrayManager
- */
- private $arrayManager;
- /**
- * The resolver for configuration paths according to source type
- *
- * @var ConfigPathResolver
- */
- private $configPathResolver;
- /**
- * @var string
- */
- private $target;
- /**
- * @param PreparedValueFactory $preparedValueFactory The factory for prepared value
- * @param DeploymentConfig\Writer $writer The deployment configuration writer
- * @param ArrayManager $arrayManager An array manager for different manipulations with arrays
- * @param ConfigPathResolver $configPathResolver The resolver for configuration paths according to source type
- * @param string $target
- */
- public function __construct(
- PreparedValueFactory $preparedValueFactory,
- DeploymentConfig\Writer $writer,
- ArrayManager $arrayManager,
- ConfigPathResolver $configPathResolver,
- $target = ConfigFilePool::APP_ENV
- ) {
- $this->preparedValueFactory = $preparedValueFactory;
- $this->deploymentConfigWriter = $writer;
- $this->arrayManager = $arrayManager;
- $this->configPathResolver = $configPathResolver;
- $this->target = $target;
- }
- /**
- * Processes lock flow of config:set command.
- * Requires read access to filesystem.
- *
- * {@inheritdoc}
- */
- public function process($path, $value, $scope, $scopeCode)
- {
- try {
- $configPath = $this->configPathResolver->resolve($path, $scope, $scopeCode, System::CONFIG_TYPE);
- $backendModel = $this->preparedValueFactory->create($path, $value, $scope, $scopeCode);
- if ($backendModel instanceof Value) {
- /**
- * Temporary solution until Magento introduce unified interface
- * for storing system configuration into database and configuration files.
- */
- $backendModel->validateBeforeSave();
- $backendModel->beforeSave();
- $value = $backendModel->getValue();
- $backendModel->afterSave();
- /**
- * Because FS does not support transactions,
- * we'll write value just after all validations are triggered.
- */
- $this->deploymentConfigWriter->saveConfig(
- [$this->target => $this->arrayManager->set($configPath, [], $value)],
- false
- );
- }
- } catch (\Exception $exception) {
- throw new CouldNotSaveException(__('%1', $exception->getMessage()), $exception);
- }
- }
- }
|