10 use Magento\Config\Model\Config\StructureFactory;
33 private $scopeResolverPool;
40 private $structureFactory;
48 private $valueFactory;
62 private $scopeTypeNormalizer;
73 StructureFactory $structureFactory,
78 $this->scopeResolverPool = $scopeResolverPool;
79 $this->structureFactory = $structureFactory;
80 $this->valueFactory = $valueFactory;
82 $this->scopeTypeNormalizer = $scopeTypeNormalizer;
97 public function create(
$path,
$value, $scope, $scopeCode =
null)
101 $structure = $this->structureFactory->create();
103 $field = $structure->getElementByConfigPath(
$path);
107 $backendModelName = $field->getData()[
'backend_model'];
108 $configPath = $field->getConfigPath() ?:
$path;
110 $backendModelName = ValueInterface::class;
113 $backendModel = $this->valueFactory->create(
115 [
'config' => $this->config]
118 if ($backendModel instanceof Value) {
121 $scope = $this->scopeTypeNormalizer->normalize($scope);
124 $scopeId = $this->scopeResolverPool->get($scope)
125 ->getScope($scopeCode)
129 if ($field instanceof Structure\Element\Field) {
130 $groupPath = $field->getGroupPath();
131 $group = $structure->getElement($groupPath);
132 $backendModel->setField($field->getId());
133 $backendModel->setGroupId(
$group->getId());
134 $backendModel->setFieldConfig($field->getData());
137 $backendModel->setPath($configPath);
138 $backendModel->setScope($scope);
139 $backendModel->setScopeId($scopeId);
140 $backendModel->setScopeCode($scopeCode);
141 $backendModel->setValue(
$value);
144 return $backendModel;
145 }
catch (\Exception $exception) {
146 throw new RuntimeException(
__(
'%1', $exception->getMessage()), $exception);
__construct(ScopeResolverPool $scopeResolverPool, StructureFactory $structureFactory, BackendFactory $valueFactory, ScopeConfigInterface $config, ScopeTypeNormalizer $scopeTypeNormalizer)