Jak dostat pole range(0,50) do config.neon
- h4kuna
- Backer | 740
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
@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)