Jak dostat pole range(0,50) do config.neon

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

Ahojte všichni,

dá se nějakým způsobem dostat do config neonu parametr který bude automaticky obsahovat pole integerů z daného rozsahu ? něco ve smyslu

parameters:
	myIntegers: range(0,50)

Díky všem za pomoc.

Editoval dez1nd (29. 3. 2017 14:00)

mkoubik
Člen | 728
+
+7
-
parameters:
    myIntegers: ::range(0,50)
dez1nd
Člen | 7
+
0
-

mkoubik napsal(a):

parameters:
    myIntegers: ::range(0,50)

Super, díky moc

h4kuna
Backer | 740
+
+1
-

Jak se má dvojitá dvojtečka chovat?

zadám-li

parameters:
    myIntegers: range(0,50)

dostanu

Nette\DI\Statement #3679
	entity private => "range" (7)
	arguments => array (2)
		0 => 0
		1 => 50

zadám-li

parameters:
    myIntegers: ::range(0,50)

dostanu

Nette\DI\Statement #d6c4
	entity private => "::range" (7)
	arguments => array (2)
		0 => 0
		1 => 50

Jsem očekával že dostanu vygenerované pole od 0 do 50. Nerozumím k čemu mi je Statement dobrý?

Zkoušel jsem to na sanboxu. php 5.6/7.0

Editoval h4kuna (30. 3. 2017 8:36)

mkoubik
Člen | 728
+
+5
-

@h4kuna to má několik vrstev:

První je parsování neonu, to má na výstupu klasické datové typy php – pole, stringy, integery, atd. Pokud napíšeš do neonu range, tak výstupem bude string "range". Jediný typ co není v php je entita, což je string s nějakými (volitelně pojmenovanými) parametry. Zapisuje se jako text(), text(a, b, c) nebo text(foo: bar) a výstupem je objekt Neon\Entity. Neon při parsování žádné php nespouští, když napíšeš ::range(0, 50), tak výstupem je entita s názvem "::range" a parametry 0 a 50.

Další je nette\di, které vezme tyhle data (ať už z neonu, php pole, yamlu, …), prožene je rozšířeníma a vygeneruje DI kontejner. Interně pracuje s DI\Statement, což je zase jen objekt popisující php výraz – nijak ho nespouští, jen z něj vygeneruje kód.

No a nakonec se načte vygenerovaný kód kontejneru, vytvoří objekt kontejneru a teprve když si vyžádáš konkrétní službu tak se spustí to tvoje range(0, 50).

Editoval mkoubik (30. 3. 2017 16:54)

h4kuna
Backer | 740
+
0
-

@mkoubik Díky za vysvětlení

V bootstrapu jsem zkoušel

dump($container->getParameters()['myIntegers']);
exit;

Jasný když si to pošlu do třídy, tak dostanu co chci, což mi nedošlo že se stane.