Vlastní extension – náhrada parameters

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MartinitCZ
Člen | 580
+
0
-

Ahoj.

Potřeboval bych vlastní extension, z kterého budu brát určitá nastavení.
Přidal jsem si Extension „martinit“ ,ale už se mi nijak nedaří nastavit výchozí parametry. Toto rozšíření by mělo fungovat jako $this->context->params jen to bude v mé extension.

Nevíte, jak nastavit ty výchozí parametry?

Díky :)

martinit:
	uploadDir: "%wwwDir/asset/upload"
	defaultAvatar:

Editoval martinit (23. 10. 2012 20:33)

LeonardoCA
Člen | 296
+
0
-

Máš to popsané tady v dokumentaci.

Patrik Votoček
Člen | 2221
+
0
-
class Extension extends \Nette\Config\CompilerExtension
{
	public $defaults = array(
		'defaultAvatar' => 'foo',
	);

	public function loadConfiguration()
	{
		dump($this->getConfig($this->defaults));
	}
}
martinit:
	uploadDir: "%wwwDir/asset/upload"

output:

array(
	'uploadDir' => '%wwwDir/asset/upload',
	'defaultAvatar' => 'foo',
);

Ale nejsem si zcela jistý jestli je to to na co jsi se ptal…

Btw máš tam typo %wwwDir% (chybí ti tam závěrečné ‚%‘.

MartinitCZ
Člen | 580
+
0
-

@Patrik Votoček: K tomuto jsem se dostal (dokonce i ten dump vypíše vše jak má), ale už se nemůžu dostat k těm parametrům např. v presenteru.

Editoval martinit (23. 10. 2012 21:18)

Patrik Votoček
Člen | 2221
+
0
-

můžeš uvést příklad toho jak to chceš použít? moc pořád nechápu co že to vlastně chceš…

MartinitCZ
Člen | 580
+
0
-

@Patrik Votoček: Používám hodně parametrů pro určitá nastavení. Abych si to zpřehlednil, tak si chci ukládat ve vlastní extension (martinit).
Takže použití by mělo vypadat takto $this->context->martinit->uploadDir nebo $this->context->martinit['uploadDir'].

Snad to jde?

mkoubik
Člen | 728
+
0
-

Pokud to chceš používat přes context, tak ti stačí udělat si sekce v parameters:

parameters:
	martinit:
		uploaderDir: ...
$this->context->parameters->martinit['uploaderDir'];
nanuqcz
Člen | 822
+
0
-

martinit: Napadají mě 3 možnosti:

  1. Zkoušel jsi aby ten extension implementoval ArrayAccess (případně dědil z Nette\ArrayHash)?
  2. Možná by šlo přistoupit k sekci paramsCompilerExtension a přidat hodnoty tam? S tím ale vůbec nemám zkušenosti, tak to ber s rezervou :-)
public function afterCompile(Nette\Utils\PhpGenerator\ClassType $class)
{
    $container = $this->getContainerBuilder();
    $container->params['martinit'] = array('foo' => 'bar');
}
  1. Anebo jak píše mkoubik ;-)
MartinitCZ
Člen | 580
+
0
-

@**mkoubik**: Ano o tom vim, ale chtěl jsem to řešit jinak.
@**nanuqcz**: Díky za info, ale bohužel půjde použít jen tam 3. možnost. :/