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

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
+1
-

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
+
0
-

Krátká odpověď: nejde to

Dlouhá odpověď: mohlo by to jít v budoucnu

David Grudl
Nette Core | 8152
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.