Extension služby s parametrem definované v neonu

před 2 lety

Jan Mikeš
Člen | 777
+
+1
-

Ahoj!

Chtěl bych registrovat služby (přidávat jejich definice) v extension pomocí neon configu, namísto php $builder->addDefinition().

Narazil jsem ale na problém, pokud mám služby s parametry.

V extension mám následující kód:

	public function loadConfiguration(): void
	{
		$builder = $this->getContainerBuilder();
		$config = $this->loadFromFile(__DIR__ . '/extension.neon');

		if (isset($config['parameters'])) {
			$this->validateConfig($config['parameters']);
		}

		$this->compiler::loadDefinitions(
			$builder,
			$config['services'],
			$this->name
		);
	}

A v extension.neon:

parameters:
	apiKeys:
		googleMaps: 'xyz'

services:
	- GoogleMapsGeocoder(%apiKeys.googleMaps%)

Jenže toto mi vyhodí chybu Missing parameter 'apiKeys.googleMaps'.

Pokud si tam nechám parameters a definici služby přesunu zpět do PHP:

		$builder->addDefinition($this->prefix('geocoder'))
			->setType(GoogleMapsGeocoder::class)
			->setArguments([
				$this->config['apiKeys']['googleMaps']
			]);

S tímto vše funguje.

Dotaz tedy zní, jak dokážu v neonu definovat tuto třídu a říci jí, aby si vzala ten parametr? :-)

před 2 lety

CZechBoY
Člen | 3452
+
0
-

Asi si budeš muset udělat novej ContainerBuilder pro každej neon soubor. Parametry se totiž tahaj z ContainerBuilderu https://github.com/…Compiler.php#L281 a ten o tvých parametrech v extension.neon neví.

před 2 lety

Felix
Nette Core | 967
+
+1
-

Ja osobne bych parameters nedaval takhle do neonu v CompilerExtension. Prijde mi, ze to tam moc nepatri.

Pokud prece..Myslim, ze by melo jit mergnout pole parameters z tveho neonu do $builder->parameters. Ale opatrne s tim.