Jak v rozšíření přistoupit k parametrům jiného rozšíření

- Tomáš Votruba
 - Moderator | 1114
 
Chtěl bych mít vlastní rozšíření, které upraví parametry
rozšíření NetteExtension.
Konkrétně přesunou toto nastavení z config.neon do mého
Extension:
nette:
	container:
		debugger: TRUE
Nejdále jsem se dostal k tomuto (což nefunguje :)).
class MyExtension extends CompilerExtension
{
	public function loadConfiguration()
	{
		$config = $this->compiler->getConfig();
		$config['nette']['container'] = ['debugger' => TRUE];
	}
}
Jak na to?

- Filip Procházka
 - Moderator | 4668
 
Krátká odpověď: nejde to
Dlouhá odpověď: mohlo by to jít v budoucnu

- David Grudl
 - Nette Core | 8285
 
Tomáš: protože getConfig() vrací kopii a ne referenci, tak to takto nefunguje.
Filip: můžeš to vysvětlit, jak by to mohlo jít v budoucnu?

- Filip Procházka
 - Moderator | 4668
 
No tak zrovna u tohohle konkrétního případu mi nedává
absolutně smysl mít to jinde než v config.local.neon. Tomáši,
zkus si pustit stránku s a bez tohohle panelu, je tam rozdíl vteřiny když
se renderuje (na stránce s hodně services hodně vteřin). To proste nechceš
k normálnímu vývoji.
Ale jako příklad…
namespace Nette\DI;
interface IContainerConfigProvider
{
	/** @return array */
	function getDIContainerConfig();
}
class MyExtension extends CompilerExtension implements Nette\DI\IContainerConfigProvider
{
	public function loadConfiguration()
	{
		// ..
	}
	public function getDIContainerConfig()
	{
		return ['debugger' => TRUE];
	}
}
Zbytek je doufám jasný z mého RFC.

- Tomáš Votruba
 - Moderator | 1114
 
Díky za vysvětlení Filipe, použití
config[.local/.prod].neon mi už teď přijde v pořádku.
Ono je toho více, co bych chtěl nastavit:
nette:
	session:
		autoStart: TRUE
		debugger: TRUE
		expiration: 30 days
	container:
		debugger: TRUE
	debugger:
		email: tomas.vot@gmail.com
		bar:
			- @\Schmutzka\Diagnostics\Panels\CleanerPanel
			- Nextras\MailPanel\MailPanel
Pokud bych to měl pouze v config.local.neon, nebudu
mít v dev módu na produkci k tomuto panelu přístup. Či ano?
Nebo lépe načítat config.dev.neon, který bude dědit od
config.dev.neon a přepisovat nastavení debug baru? Komplikované,
ale čisté.

- Filip Procházka
 - Moderator | 4668
 
Pokud používáš config.local.neon, tak žádné dev ani prod
nemáš. Nemáš ani config.local.neon commitlý ve VCS.
Workflow je takové, že každý vývojář i hosting má svůj
config.local.neon, který není commitlý a je ignorovaný. Tím
pádem může mít každý jiné heslo do lokální databáze a žádný
vývojář nemá u sebe v počítači (ani ve VCS) commitlé údaje pro
produkci.
Nastavení session je konkrétní pro aplikaci, na tom nevidím nic divného
mít to v app/config/config.neon, stejně tak debugger email.
A když chceš změnit storage tak to jde úpravou služby přes
ContainerBuilder.
Ovšem panely by mohly být registrovány z jednotlivých rozšíření, viz moje RFC.