Vlastní proměnná v config.neon
- Pavel Kravčík
- Člen | 1196
Nabídnu ještě třetí řešení, které jsme začali používat po
zkušenostech, které zmínil David s Alešem. Vytvoř si službu
SettingManager
a ten si předávej jako službu do presenterů, kde
ho potřebuješ.
Pak tam používáme věci jako jsou kategorie, máme dynamicky generované menu přes neon a různé další kategorie jako je nastavení mailů, barviček a podobně. :)
Ještě přidám tu nejpodstatnější část pro Tebe, zbytek už je jednoduchý:
- Core\SettingManager(@container::getParameters())
Editoval Pavel Kravčík (23. 2. 2017 15:17)
- David Matějka
- Moderator | 6445
@PavelKravčík to uz rovnou muzes sahat na context.
abych jeste doplnil svou odpoved. osobne si nepamatuji, kdy jsem naposled potreboval nejaky parametr v presenteru. vzdy je predavam pouze komponentam a sluzbam. ale pokud je opravdu potreba predat presenteru, tak radeji explicitne skrz config. tahani parametru pres context i nejaky setting manager, ktery bude mit vsechny parametry, se skryvani zavislosti
- Pavel Kravčík
- Člen | 1196
@DavidMatějka: Mohl bys trochu rozvést nevýhody? Parametrů používáme relativně hodně a tohle nám pomohlo je lépe spravovat, testovat a hlavně lépe přenášet nastavení mezi servery. Případně, jak to řešit lépe? Díky.
- David Matějka
- Moderator | 6445
jak rikam, predavat konkretni parametry tam, kde jsou potreba (nejlepe do sluzeb a komponent, vyhnout se presenterum)
s tim setting managerem, abys zjistil, co opravdu presenter potrebuje za parametry, tak musis prolizt kod a hledat.
- Pavel Kravčík
- Člen | 1196
My do presenterů nepředáváme nic. Ale třeba pokud upload komponenta
potřebuje 4 parametry, tak mi přišlo hezčí mít manager, který jí
předá ty parametry a například zkontroluje, jestli vůbec existuje cesta kam
ta komponenta má ty soubory nahrát. Případně vyhodit výjimku či cestu
vytvořit a komponenta přijímá jen konkrétní cestu a ostatní jí
nezajímá. Přišlo mi to čistější řešení než
uploadComponent(%uploadDir%)
a vyhazovat chybu až někde
v renderu. Ale jsem amatér, proto se ptám, jak by to bylo hezčí.
Právěže bylo vždy pracné procházet všechny složky a zjišťovat, kde co mám založit aby ta komponenta fungovala, takhle si jí jen zavolám v jakkémkoliv projektu a funguje.
Editoval Pavel Kravčík (23. 2. 2017 16:19)
- CZechBoY
- Člen | 3608
Pkud máš kategorii parametrů tak se hodí mít na to nějakou obálku.
Tenhle přístup se mi docela líbí a rád bych ho začal používat víc https://pehapkari.cz/…kty-v-nette/
Editoval CZechBoY (23. 2. 2017 16:27)
- AdamBI
- Člen | 17
Rozhodl jsem se to udělat podle první metody v tomto článku https://pehapkari.cz/…kty-v-nette/
Nastavil jsem si vlastní parameters a zaregistroval presenter takto:
services:
router: App\RouterFactory::createRouter
- App\Presenters\CronPresenter(%test%)
do presenteru jsem dal proměnné $config ale teď mi to hlásí chybu: Service ‚24_App_Presenters_CronPresenter‘: Parameter $config in App\Presenters\CronPresenter::__construct() has no class type hint or default value, so its value must be specified.
- jiri.pudil
- Nette Blogger | 1032
Dej ho na první místo, nebo v configu uveď i ten Context
(místo explicitního předání lze použít ...
, Nette pak
použije standardní autowiring):
services:
- App\Presenters\CronPresenter(..., %test%)