|
31 | 31 | use ContaoCommunityAlliance\DcGeneral\Contao\DataDefinition\Definition\Contao2BackendViewDefinitionInterface; |
32 | 32 | use ContaoCommunityAlliance\DcGeneral\Contao\Dca\ContaoDataProviderInformation; |
33 | 33 | use ContaoCommunityAlliance\DcGeneral\Data\ModelId; |
| 34 | +use ContaoCommunityAlliance\DcGeneral\DataDefinition\ContainerInterface; |
34 | 35 | use ContaoCommunityAlliance\DcGeneral\DataDefinition\Definition\BasicDefinitionInterface; |
35 | 36 | use ContaoCommunityAlliance\DcGeneral\DataDefinition\Definition\DataProviderDefinitionInterface; |
36 | 37 | use ContaoCommunityAlliance\DcGeneral\DataDefinition\Definition\DefaultBasicDefinition; |
|
72 | 73 | use ContaoCommunityAlliance\DcGeneral\DataDefinition\Palette\Legend; |
73 | 74 | use ContaoCommunityAlliance\DcGeneral\DataDefinition\Palette\Palette; |
74 | 75 | use ContaoCommunityAlliance\DcGeneral\DataDefinition\Palette\Property; |
| 76 | +use ContaoCommunityAlliance\DcGeneral\EnvironmentInterface; |
75 | 77 | use ContaoCommunityAlliance\DcGeneral\Exception\DcGeneralInvalidArgumentException; |
76 | 78 | use ContaoCommunityAlliance\DcGeneral\Factory\Event\BuildDataDefinitionEvent; |
77 | 79 | use ContaoCommunityAlliance\DcGeneral\Factory\Event\PopulateEnvironmentEvent; |
|
81 | 83 | use MetaModels\Attribute\ITranslated; |
82 | 84 | use MetaModels\BackendIntegration\InputScreen\IInputScreen; |
83 | 85 | use MetaModels\BackendIntegration\ViewCombinations; |
| 86 | +use MetaModels\DcGeneral\Data\Driver; |
84 | 87 | use MetaModels\DcGeneral\DataDefinition\Definition\MetaModelDefinition; |
85 | 88 | use MetaModels\DcGeneral\DataDefinition\IMetaModelDataDefinition; |
86 | 89 | use MetaModels\DcGeneral\DataDefinition\Palette\Condition\Property\IsVariantAttribute; |
@@ -199,6 +202,17 @@ public function populate(PopulateEnvironmentEvent $event) |
199 | 202 | // Trigger BuildAttribute Event. |
200 | 203 | $dispatcher->dispatch($event::NAME, $event); |
201 | 204 | } |
| 205 | + |
| 206 | + foreach ([ |
| 207 | + $environment->getDataDefinition(), |
| 208 | + $environment->getParentDataDefinition(), |
| 209 | + $environment->getRootDataDefinition() |
| 210 | + ] as $definition) { |
| 211 | + if (!$definition instanceof ContainerInterface) { |
| 212 | + continue; |
| 213 | + } |
| 214 | + $this->injectServiceContainerIntoDataDrivers($definition->getDataProviderDefinition(), $environment); |
| 215 | + } |
202 | 216 | } |
203 | 217 |
|
204 | 218 | /** |
@@ -840,8 +854,7 @@ protected function parseDataProvider(IMetaModelDataDefinition $container) |
840 | 854 | ->setTableName($container->getName()) |
841 | 855 | ->setClassName('MetaModels\DcGeneral\Data\Driver') |
842 | 856 | ->setInitializationData(array( |
843 | | - 'source' => $container->getName(), |
844 | | - 'service-container' => $this->serviceContainer |
| 857 | + 'source' => $container->getName(), |
845 | 858 | )) |
846 | 859 | ->setVersioningEnabled(false); |
847 | 860 | $container->getBasicDefinition()->setDataProvider($container->getName()); |
@@ -869,8 +882,7 @@ protected function parseDataProvider(IMetaModelDataDefinition $container) |
869 | 882 | ->setTableName($inputScreen->getParentTable()) |
870 | 883 | ->setInitializationData( |
871 | 884 | array( |
872 | | - 'source' => $inputScreen->getParentTable(), |
873 | | - 'service-container' => $this->serviceContainer |
| 885 | + 'source' => $inputScreen->getParentTable(), |
874 | 886 | ) |
875 | 887 | ); |
876 | 888 |
|
@@ -1546,4 +1558,24 @@ protected function addSelectCommand(Contao2BackendViewDefinitionInterface $view, |
1546 | 1558 |
|
1547 | 1559 | $commands->addCommand($command); |
1548 | 1560 | } |
| 1561 | + |
| 1562 | + /** |
| 1563 | + * Inject the service container into the data driver instances. |
| 1564 | + * |
| 1565 | + * @param DataProviderDefinitionInterface $providerDefinitions The definitions. |
| 1566 | + * @param EnvironmentInterface $environment The environment containing the providers. |
| 1567 | + * |
| 1568 | + * @return void |
| 1569 | + */ |
| 1570 | + private function injectServiceContainerIntoDataDrivers($providerDefinitions, $environment) |
| 1571 | + { |
| 1572 | + foreach ($providerDefinitions as $provider) { |
| 1573 | + $providerInstance = $environment->getDataProvider($provider->getName()); |
| 1574 | + if ($providerInstance instanceof Driver) { |
| 1575 | + $providerInstance->setBaseConfig( |
| 1576 | + array_merge($provider->getInitializationData(), ['service-container' => $this->serviceContainer]) |
| 1577 | + ); |
| 1578 | + } |
| 1579 | + } |
| 1580 | + } |
1549 | 1581 | } |
0 commit comments