Unable to pass parameters to action ‚Homepage:detailId‘, missing corresponding method
- ragulin
- Člen | 58
Ahoj, děkuji za radu
Nějaká random šablona někde
<a href={plink Homepage:detailId, $detailInfo['id']}>Detail</a>
Homepage prestenter
public function handleDetailId($detailId)
{
$this->detailId = $detailId;
$this->redrawControl();
}
Proč mi to vypisuje, že postrádá metodu, když jí tam mám jasně definovanou?
- Šaman
- Člen | 2667
Východiskem je neodkazovat se na cizí handlery. Kdyžtak použij
action.
Případně, pokud „šablona někde“ je v jiném presenteru, tak přesunout
handler do BasePresenteru.
Případně, pokud „šablona někde“ je v nějaké vnořené komponentě,
tak zavolat ten ->link()
přímo nad parent presenterem.
Editoval Šaman (18. 7. 2019 13:28)
- ragulin
- Člen | 58
Šaman napsal(a):
Východiskem je neodkazovat se na cizí handlery. Kdyžtak použij action.
Případně, pokud „šablona někde“ je v jiném presenteru, tak přesunout handler do BasePresenteru.
Případně, pokud „šablona někde“ je v nějaké vnořené komponentě, tak zavolat ten->link()
přímo nad parent presenterem.
Ta „šablona někde“ je šablona komponenty. Nevím jestli vnořené nebo nějak jinak…co myslíš tím „nad parent presenterem“ ? Nemohu použít action, potřebuji to jako handle při spuštění modalu
- Šaman
- Člen | 2667
V komponentě máš (když je připojena, což v době vykreslování už
je) proměnnou $this->presenter
. A přes něj už můžeš na
jeho handlery odkazovat.
Podporované jako makro to není z toho důvodu, že komponenta by měla být poměrně samostatná, což ta tvoje asi úplně není (když vyžaduje jeho signály).
- Kamil Valenta
- Člen | 822
MajklNajt napsal(a):
v prvom rade
plink
nedokáže vytvoriť odkaz na handle…
Obávám se, že to není úplně pravda, běžně plink na handle používám.
- ragulin
- Člen | 58
Šaman napsal(a):
V komponentě máš (když je připojena, což v době vykreslování už je) proměnnou
$this->presenter
. A přes něj už můžeš na jeho handlery odkazovat.Podporované jako makro to není z toho důvodu, že komponenta by měla být poměrně samostatná, což ta tvoje asi úplně není (když vyžaduje jeho signály).
Takže něco takového jako:
$this->presenter->detailId($this->detailId);
- duke
- Člen | 650
Spíše používej signál vlastní komponenty, a pokud je třeba reagovat na vyšší úrovni (z nadřazené komponenty, či z presenteru), řeš to pomocí eventů (vyvolej event v komponentě, a nadřazená komponenta či presenter na něj pak může reagovat). Obecně bys neměl řídit presenter (obecně nadřazenou komponentu) z podřízených komponent (ono už vlastně i makro plink tento princip poněkud porušuje).
- Vojtha
- Člen | 37
Ahoj,
mám podobný problém, a trochu se v tom ztrácím. Začal jsem s Nette před 2 lety, a od začátku normálně používám pro generování odkazů v šablonách např.:
<a n:href="User:points-history $user->id">{_ui.points.show-history}</a>
a vždy jsem ve výsledku obdržel funkční link opět např. na:
public function renderPointsHistory($id = 0): void
{
if (!$this->getUser()->isLoggedIn()) {
$this->redirect('User:login');
} ...
Teď jsem se zhruba po půl roce pustil do nového projektu, a ani za nic
nemohu přijít na to, proč mi pokus o vygenerování odkazu háže chybu
Invalid link: Unable to pass parameters to action 'User:points-history', missing corresponding method.
Obě funkce jsou ve stejném presenteru, tj. User, nějak nevidím, proč by
toto měl být pro Nette problém. Můžete mě prosím někdo navést, kde by
mohla být chyba?
Díky!
- Kamil Valenta
- Člen | 822
Protože bez parametru nemusí actiona / render existovat a bude se hledat
jen šablona.
Kontrolovat přihlášení a pokoušet se o případný redirect v render
metodě je pozdě.