Unable to pass parameters to action ‚Homepage:detailId‘, missing corresponding method

ragulin
Člen | 58
+
0
-

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?

Kamil Valenta
Člen | 752
+
0
-

Odkaz na handle končí vykřičníkem, takto odkazuješ na action.

ragulin
Člen | 58
+
0
-

kamil_v napsal(a):

Odkaz na handle končí vykřičníkem, takto odkazuješ na action.

Díky,

<a href={plink Homepage:detailId!, $detailInfo['id']}>Detail</a>

V ten moment mi to ale vypíše, že :
Component with name ‚Homepage‘ does not exist.

Editoval ragulin (18. 7. 2019 13:00)

MajklNajt
Člen | 470
+
0
-

v prvom rade plink nedokáže vytvoriť odkaz na handle…

ragulin
Člen | 58
+
0
-

MajklNajt napsal(a):

v prvom rade plink nedokáže vytvoriť odkaz na handle…

To nedokáže ale ani n:href, ani link…má to nějaké jiné východisko?

Šaman
Člen | 2632
+
0
-

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
+
0
-

Š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 | 2632
+
0
-

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 | 752
+
0
-

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
+
-1
-

Š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
+
0
-

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 | 36
+
0
-

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!

mystik
Člen | 284
+
+3
-

Vojtha: Neni to tim ze tam mas navic tu pomlcku? Mas points-history misto pointsHistory?

Vojtha
Člen | 36
+
0
-

Super, díky! Zvláštní ale je, že bez parametru to funguje i s pomlčkou, to je důvod, proč jsem si toho hned nevšiml.

Kamil Valenta
Člen | 752
+
+2
-

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ě.