/**
  * 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;
     }
 }
Beispiel #2
-1
 /**
  * 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;
     }
 }