Extension služby s parametrem definované v neonu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- Jan Mikeš
 - Člen | 771
 
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? :-)

- CZechBoY
 - Člen | 3608
 
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í.