Nette neon načítanie boolean hodnoty z env

steelbull
Člen | 240
+
0
-

Pridal som v bootstrap načítavanie z env:

$configurator->addDynamicParameters([
	'env' => getenv(),
]);

Problém však je pri iných typoch, ako string. Ak priradím napr.

mail:
	...
	port: %env.APP_SMTP_PORT%
	...

dostanem chybu: The dynamic parameter used in ‚mail › port‘ expects to be int, string ‚587‘ given.

Viem nejak pretypovať hodnotu z env (string) na int a v iných prípadoch aj na bool?

A viem nejak nastaviť default hodnotu, keď nie je definovaná v env?

Editoval steelbull (9. 12. 2023 22:40)

steelbull
Člen | 240
+
0
-

David Grudl napsal(a):

https://doc.nette.org/…ion/services#…

veľmi pekne ďakujem za odpoveď, aj to som skúšal, ale po zadaní:

mail:
	smtp: int(::getenv('MAIL_SMTP'))

dostanem exception:

The item 'mail › smtp' expects to be bool, object Nette\DI\Definitions\Statement given.

Mám ale ešte druhý problém. Ako vyplním default value ak nie je hodnota definovaná v env (pri tomto fielde to nemá význam, ale mám veľa iných, kde by som potreboval mať default value)?

Editoval steelbull (12. 12. 2023 12:23)

mystik
Člen | 292
+
+1
-

Pak to je omezeni te extension co pouzivas, ktera vyzaduje staticky uadany bool a nedovoluje dynamice nacitani z env

steelbull
Člen | 240
+
0
-

mystik napsal(a):

Pak to je omezeni te extension co pouzivas, ktera vyzaduje staticky uadany bool a nedovoluje dynamice nacitani z env

Neviem o aký extension má ísť, lebo ten tield sa týka nette/mail. Skúšal som aj pri viacerých fieldoch, ale pokiaľ je vyžadovaný typ, tak všade je rovnaký problém. Mám ale ešte aj druhý väčší problém – Exception v prípade, ak v env hodnota nie je definovaná. Chcel by som ideálne docieliť stav, že niektoré hodnoty budú povinné ale niektoré vybrané hodnoty budú obsahovať default hodnotu.

Dá sa v neone niečo také urobiť? Ak nie, potom by som to musel vyriešiť ešte v bootstrap.php aby v env už všetky existovali, kým sa v neone použijú, ale chcem sa vyhnúť (ako v čechách hovoríte „prasárni“ :D), aby som všetky hodnoty z env nemusel mať vymenované v bootstrape.

David Grudl
Nette Core | 8149
+
+1
-

Dá sa v neone niečo také urobiť?

Můžeš si na to udělat funkci.

Nicméně v mail > smtp nemůže být dynamická hodnota. Hodnota musí být známá už v době kompilace, protože podle toho generuje kontejner.

steelbull
Člen | 240
+
0
-

David Grudl napsal(a):

Dá sa v neone niečo také urobiť?

Můžeš si na to udělat funkci.

Nicméně v mail > smtp nemůže být dynamická hodnota. Hodnota musí být známá už v době kompilace, protože podle toho generuje kontejner.

Veľmi pekne ďakujem za všetky odpovede.

Funkciu, ktorú si na to môžem urobiť budem vedieť použiť priamo v neone? Skúšal som použiť funkciu pri tom smtp fielde, ale mal som vždy rovnaký výsledok (exception ako som spomenul skôr). A práve pre takéto prípady som chcel nastavovať hodnotu z env: pre smtp, timeout, encryption, tracy fieldy a ďalšie.

V podstate potrebujem vyriešiť len tie, ktoré musia byť nastavené pri inicializácii nette spôsobom isset(env['SMTP']) ? (bool)env['SMTP'] : false; Teraz to viem vyriešiť len tak, že hodnoty predpripravím v bootstrape, aby boli v neone už v správnom tvare.