/** * Create component object * * @param string $identifier * @param string $name * @param array $arguments * @return UiComponentInterface * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function create($identifier, $name = null, array $arguments = []) { if ($name === null) { $bundleComponents = $this->componentManager->prepareData($identifier)->getData($identifier); if (empty($bundleComponents)) { throw new LocalizedException(new \Magento\Framework\Phrase('You use an empty set.')); } list($className, $componentArguments) = $this->argumentsResolver($identifier, $bundleComponents[$identifier]); $componentArguments = array_replace_recursive($componentArguments, $arguments); if (isset($componentArguments['config']['class'])) { $className = $componentArguments['config']['class']; } if (!isset($componentArguments['context'])) { $componentArguments['context'] = $this->contextFactory->create(['namespace' => $identifier]); } $reverseMerge = isset($componentArguments['data']['reverseMetadataMerge']) && $componentArguments['data']['reverseMetadataMerge']; $bundleComponents = $this->mergeMetadata($identifier, $bundleComponents, $reverseMerge); $componentContext = $componentArguments['context']; $components = []; foreach ($bundleComponents[$identifier]['children'] as $childrenIdentifier => $childrenData) { $children = $this->createChildComponent($childrenData, $componentContext, $childrenIdentifier); $components[$childrenIdentifier] = $children; } $components = array_filter($components); $componentArguments['components'] = $components; /** @var \Magento\Framework\View\Element\UiComponentInterface $component */ $component = $this->objectManager->create($className, array_replace_recursive($componentArguments, $arguments)); return $component; } else { $rawComponentData = $this->componentManager->createRawComponentData($name); list($className, $componentArguments) = $this->argumentsResolver($identifier, $rawComponentData); $processedArguments = array_replace_recursive($componentArguments, $arguments); if (isset($processedArguments['config']['class'])) { $className = $processedArguments['config']['class']; } if (isset($processedArguments['data']['config']['children'])) { $components = []; $bundleChildren = $this->getBundleChildren($processedArguments['data']['config']['children']); foreach ($bundleChildren as $childrenIdentifier => $childrenData) { $children = $this->createChildComponent($childrenData, $processedArguments['context'], $childrenIdentifier); $components[$childrenIdentifier] = $children; } $components = array_filter($components); $processedArguments['components'] = $components; } /** @var \Magento\Framework\View\Element\UiComponentInterface $component */ $component = $this->objectManager->create($className, $processedArguments); return $component; } }
/** * Create component object * * @param string $identifier * @param string $name * @param array $arguments * @return UiComponentInterface * @throws \Magento\Framework\Exception\LocalizedException */ public function create($identifier, $name = null, array $arguments = []) { if ($name === null) { $bundleComponents = $this->componentManager->prepareData($identifier)->getData($identifier); if (empty($bundleComponents)) { throw new LocalizedException(new \Magento\Framework\Phrase('You use an empty set.')); } list($className, $componentArguments) = $this->argumentsResolver($identifier, $bundleComponents[$identifier]); $componentArguments = array_merge($componentArguments, $arguments); if (!isset($componentArguments['context'])) { throw new LocalizedException(new \Magento\Framework\Phrase('Context, is required argument.')); } $componentContext = $componentArguments['context']; $components = []; foreach ($bundleComponents[$identifier]['children'] as $childrenIdentifier => $childrenData) { $children = $this->createChildComponent($childrenData, $componentContext, $childrenIdentifier); $components[$childrenIdentifier] = $children; } $components = array_filter($components); $componentArguments['components'] = $components; /** @var \Magento\Framework\View\Element\UiComponentInterface $component */ $component = $this->objectManager->create($className, array_merge($componentArguments, $arguments)); return $component; } else { $defaultData = $this->componentManager->createRawComponentData($name); list($className, $componentArguments) = $this->argumentsResolver($identifier, $defaultData); /** @var \Magento\Framework\View\Element\UiComponentInterface $component */ $component = $this->objectManager->create($className, array_merge($componentArguments, $arguments)); return $component; } }