Skip to content

Commit e46b5e7

Browse files
authored
Extension: Add support for user defined extra modules as service.
1 parent 3692e83 commit e46b5e7

File tree

1 file changed

+23
-2
lines changed

1 file changed

+23
-2
lines changed

src/EngineExtension.php

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,19 @@
1212
use Mathematicator\Engine\Router\Router;
1313
use Mathematicator\Engine\Translation\TranslatorHelper;
1414
use Nette\DI\CompilerExtension;
15+
use Nette\Schema\Expect;
16+
use Nette\Schema\Schema;
1517

1618
final class EngineExtension extends CompilerExtension
1719
{
20+
public function getConfigSchema(): Schema
21+
{
22+
return Expect::structure([
23+
'extraModules' => Expect::arrayOf(Expect::string())->castTo('array'),
24+
])->castTo('array');
25+
}
26+
27+
1828
public function beforeCompile(): void
1929
{
2030
$builder = $this->getContainerBuilder();
@@ -26,12 +36,23 @@ public function beforeCompile(): void
2636
->setFactory(TranslatorHelper::class);
2737

2838
$builder->addDefinition($this->prefix('sampleModule'))
29-
->setFactory(SampleModule::class);
39+
->setFactory(SampleModule::class)
40+
->setAutowired(SampleModule::class);
3041

31-
$builder->addDefinition($this->prefix('engine'))
42+
$engine = $builder->addDefinition($this->prefix('engine'))
3243
->setFactory(Engine::class)
3344
->addSetup('?->addExtraModule(?)', ['@self', '@' . SampleModule::class]);
3445

46+
if ($this->config['extraModules'] !== []) {
47+
foreach ($this->config['extraModules'] as $extraModule) {
48+
$builder->addDefinition($this->prefix('extraModuleUser') . '.' . md5($extraModule))
49+
->setFactory($extraModule)
50+
->setAutowired($extraModule);
51+
52+
$engine->addSetup('?->addExtraModule(?)', ['@self', '@' . $extraModule]);
53+
}
54+
}
55+
3556
$builder->addDefinition($this->prefix('queryNormalizer'))
3657
->setFactory(QueryNormalizer::class);
3758

0 commit comments

Comments
 (0)