PHPStan Presenter|null a Template
- Jiří Nápravník
- Člen | 710
Začínám používat PHPstan více a chci jet na nejvyšší možné úrovni.
Narazil jsem na to, že v komponentách se nelíbí
$this->template->render('cesta');
byl jsem tak na to zvyklý, vím, že jde $this->getTemplate()->setFile()->render();, ale je to trochu zdlouhavé, jak to řešíte vy?
Na nejvyší úrovni narážím na to když v komponentě použiju
$this->getPresenter()->link()
hláška je: „Cannot call method link() on Nette\Application\UI\Presenter|null“, to by sice šlo použít i LinkGenerator za to, ale to getPresenter() používám často, pro isAjax, redirect apod. Jak to řešíte, krom toho abych to musela nějak divoce if-ovat vždy.
- Jan Tvrdík
- Nette guru | 2595
To první viz https://forum.nette.org/…-vs-template
sice šlo použít i LinkGenerator
LinkGenerator a Presenter generují linky s jinou sémantikou, tj. typicky si nemůžeš zvolit jestli použiješ LinkGenerator nebo Presenter, protože právě jedna z variant bude správně.
isAjax
Lze volat přímo na Http requestu.
redirect
Bys typicky neměl z komponenty volat.
- Jan Tvrdík
- Nette guru | 2595
No hlavně Presenter dělá odkazy v kontextu aktuální requestu, tj. zachovává persistentní parametry. LinkGenerator dělá odkazy mimo kontext aktuální requestu.
- Jiří Nápravník
- Člen | 710
@JanTvrdík Díky za odpověď.
Co se týče Template vs. ITemplate, v tom vlýkně je několik možných řešení, které je to správné ale?
isAjax jsem nevěděl, že jde na requestu díky.
Nicméne redirect v komponentě jsem nevěděl, že se nemá dělat, jaký je tedy správny postup, pokud je nezbytný. Například přidám zboží do košíku, pokud je ajax tak pouze redirect(‚this‘), pokud není, tak přesměruju na Homepage s FlashMessage, apod. Nebo to dělám špatně? Resp. proč tedy je vlastně $this->getPresenter() v Controlu?
- Tharos
- Člen | 1030
Pro inspiraci… Já na tyhle redirecty ke vší spokojenosti používám
vlastní události. V komponeně mám událost například
onItemAdded
a v presenteru (respektive tam, kde komponentu
vytvářím a konfiguruji) si na ten event navěsím Closure
,
která typicky vyřeší flash message a přesměrování či případnou
invalidaci snippetů.
Nevím, jestli je to best practice, ale zatím jsem si s tím nikdy nenamlátil… :)
Komponenty pak vůbec neví o nějakých presenterech (mluvím o té části kódu, kterou píšu, nikoliv o poděděném základu). Celkově má pak graf závislostí mezi komponentami podobu stromu.
- Jiří Nápravník
- Člen | 710
Díky za reakci, v minulosti jsem to taky takhle používal – konkrétně přes Eventy, ale pak jsem se dal cestou, že to budu mít vše v jedné komponentě jako celek, přišlo mi to logičtější, ale asi je to tedy špatná cesta.