Jak načítat parametry z metody
- H0w4rd
- Člen | 96
V neonu mám tohle:
translation:
locales:
whitelist: %languages%
default: %defaultLanguage%
fallback: [%defaultLanguage%]
Potřeboval bych to načítat z LanguageRepository.
Něco takového by mělo fungovat:
translation:
locales:
whitelist: @App\Package\Language\LanguageRepository::fetchItemsAsArray()
default: @App\Package\Language\LanguageRepository::getDefaultLanguage()
Ale hází mi to chybu:
Nette\DI\InvalidConfigurationException
The item ‚translation › locales › whitelist‘ expects to be array, object
Nette\DI\Definitions\Statement given.
Nevíte, jak na to?
- Marek Bartoš
- Nette Blogger | 1260
Fungovat to opravdu může, ale extension kterou používáš explicitně
vyžaduje, aby whitelist byl pole.
Pokud s whitelistem extension nepotřebuje pracovat a jen ho předává do
služby, tak by šel Statement povolit úpravou kódu té extension.
- m.brecher
- Generous Backer | 863
@MarekBartoš
také jsem se divil, proč @ App\Package\Language\LanguageRepository::fetchItemsAsArray() která vrací array v konfiguraci extension jakoby místo array vrací Nette\DI\Definitions\Statement.
Otestoval jsem, že pokud v definici rozšíření nekontrolujeme typ konfiguračního parametru, tak Nette\DI\Definitions\Statement se posléze automaticky přetvoří na array. Domýšlím si, že v okamžiku kdy se extension konfiguruje ještě příslušná služba vytvořena není, proto se konfigurační parametr doplní později.
Což je chování, které je matoucí, pokud není řádně vysvětleno. V dokumentaci jsem zkoušel něco na téma konfigurace extension pomocí Nette\DI\Definitions\Statement najít:
https://doc.nette.org/…onfiguration#…
https://doc.nette.org/…n/extensions#…
Našel jsem jen jednoduché ukázky kódů konfigurace extension, ale chybí tam příklad s Nette\DI\Definitions\Statement + nějaké srozumitelné vysvětlení. Časem, jakmile tomu budu více rozumět, bych to do dokumentace doplnil.
Editoval m.brecher (27. 4. 2023 1:56)
- Marek Bartoš
- Nette Blogger | 1260
Statement představuje expression v konfiguraci. Může jít o objekt, volání metody, … cokoli, co není scalar|null|array. Statement se transformuje na php kód až při kompilaci kontaineru a teprve zkompilovaný kód toho volání vrací array. Takže array bude dostupný až po tom, co kód extension proběhne, zatímco extension vyžaduje array už na svém vstupu.
Extensions vskutku zdokumentované jsou jen základně. Jen to co v nich lze dělat a jakým způsobem nejspíš vydá na několik kapitol… ostatně se o tom můžeš přesvědčit v některých šílenostech co už jsem napsal
Editoval Marek Bartoš (27. 4. 2023 1:55)
- m.brecher
- Generous Backer | 863
@MarekBartoš
Extensions vskutku zdokumentované jsou jen základně.
Časem, až budu mít chvilku tak zkusím téma prostudovat a s Tvojí odbornou pomocí dokumentaci doplnit. Nemusí tam být všechny složitosti, ale nějaké základní důležité informace které tam chybí bych doplnil.
- H0w4rd
- Člen | 96
Diky za reakce. Asi jsem mel vcera vecer vypnutou pulku mozku, nedoslo mi, ze je blbost tahat jazyky z databaze, kdyz mam preklady porad ulozene v neon souborech :)
Mozna prave proto je vyzadovano, aby whitelist byl primo pole.
Ale i tak me zarazilo, ze to nejde a soustredil jsem se na to, jak to vyresit a ne na to, jestli to ma smysl.