-
Notifications
You must be signed in to change notification settings - Fork 9.3k
/
UiComponent.php
75 lines (69 loc) · 1.98 KB
/
UiComponent.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Ui\Component\Wrapper;
use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Element\UiComponentInterface;
use Magento\Framework\View\Element\UiComponent\ContainerInterface;
use Magento\Framework\View\Element\Template\Context as TemplateContext;
/**
* Class UiComponent
*
* Encapsulate UI Component to represent it as standard Layout Block
*/
class UiComponent extends Template implements ContainerInterface
{
/**
* Ui component
*
* @var UiComponentInterface
*/
protected $component;
/**
* @var BlockFactory
*/
protected $blockWrapperFactory;
/**
* Constructor
*
* @param TemplateContext $context
* @param UiComponentInterface $component
* @param BlockFactory $blockWrapperFactory
* @param array $data
*/
public function __construct(
TemplateContext $context,
UiComponentInterface $component,
BlockFactory $blockWrapperFactory,
array $data = []
) {
$this->component = $component;
$this->blockWrapperFactory = $blockWrapperFactory;
$this->setNameInLayout($this->component->getName());
parent::__construct($context, $data);
}
/**
* Render block HTML
*
* @return string
*/
protected function _toHtml()
{
foreach ($this->getChildNames() as $childName) {
$childBlock = $this->getLayout()->getBlock($childName);
if ($childBlock) {
$wrapper = $this->blockWrapperFactory->create([
'block' => $childBlock,
'data' => [
'name' => 'block_' . $childName
]
]);
$this->component->addComponent('block_' . $childName, $wrapper);
}
}
$result = $this->component->render();
return (string)$result;
}
}