Router, nelze zavolat action v latte

popcorn
Člen | 28
+
0
-

Ahoj, podle dokumentace bych měl být schopný zavolat nějakou akci v latte šabloně, jenže když se pokusím o

<a n:href="Settings:LeaveTeam">Opustit tým</a>

Tak mě to přesměruje na …settings/leave-team a neprovede action. Hádám, že bude chyba v nastavení routeru, ale kde?

RouterFactory:

class RouterFactory
{
    use StaticClass;

    /**
     * Vytváří a vrací seznam routovacích pravidel pro aplikaci.
     * @return IRouter výsledný router pro aplikaci
     */
	public static function createRouter(): RouteList
	{
        $router = new RouteList;
		$router[] = new Route('<presenter>/<action>', '<presenter>:default');
		$router[] = new Route('signIn', 'SignIn:default');
		$router[] = new Route('signUp', 'SignUp:default');
		$router[] = new Route('Settings', 'Settings:default');
		$router[] = new Route('Home', 'Home:default');
        return $router;
	}
}
Mysteria
Člen | 797
+
+2
-

Routa $router[] = new Route('<presenter>/<action>', '<presenter>:default'); by měla být jako poslední, protože se jede dle pořadí. Může se ti stát, že ti tahle matchne nějakou specifikou, kterou uvedeš později.

A k tomu problému, zkusil bych malé L v názvu akce: <a n:href="Settings:leaveTeam">Opustit tým</a>, to ti zavolá metodu actionLeaveTeam případně renderLeaveTeam v Settings presenteru.

popcorn
Člen | 28
+
0
-

Bohužel, ani po přehození

$router[] = new Route('<presenter>/<action>', '<presenter>:default');

na konec a změny velkého L na l nefunguje. :/

Editoval popcorn (24. 8. 2019 21:36)

chemix
Nette Core | 1310
+
0
-

Ahoj @popcorn jaka verze Nette?

popcorn
Člen | 28
+
0
-

Verze 3.0., PHP 7.3

Editoval popcorn (25. 8. 2019 8:04)

F.Vesely
Člen | 369
+
0
-

Pise ti to nejakou chybu? Dole v Tracy baru muzes videt, jaka routa se pouzila a jaky Presenter s akci se vola.

MajklNajt
Člen | 502
+
+2
-

netestoval som to, ale zápis druhého argumentu sa mi zdá divný:

$router[] = new Route('<presenter>/<action>', '<presenter>:default');

nemal by byť východzí presenter zadefinovaný takto?

$router[] = new Route('<presenter>/<action>', 'Page:default');

a samozrejme malé písmeno na začiatku názvu akcie ako píše Mysteria

popcorn
Člen | 28
+
0
-

^ Zkusil jsem to přepsat a stále stejné, Tracy zde: http://prntscr.com/oxcx74

popcorn
Člen | 28
+
0
-

Takto mám action

	public function actionLeaveTeam()
	{
		$this->teamManager->leaveTeam();
	}
F.Vesely
Člen | 369
+
0
-

A jak vis, ze ti to nefunguje, kdyz ti to zadnou chybu nehazi? Router mas spravne, v te Tracy vidis, ze se ta akce vola.

popcorn
Člen | 28
+
0
-

Protože mě to přesměruje sem: http://prntscr.com/oxdnmq a nevykoná to tu query, která je v manageru.

Editoval popcorn (25. 8. 2019 22:10)

Gavrilo
Člen | 46
+
+1
-

popcorn napsal(a):

Protože mě to přesměruje sem: http://prntscr.com/oxdnmq a nevykoná to tu query, která je v manageru.

Potrebuješ to nastaviť ako ajaxovu akciu prípadne jej nastaviť redirect.

Skús tam použiť toto:

public function actionLeaveTeam(): void
{
    $this->teamManager->leaveTeam();
    $this->redirect('Page:Default');
}

Query sa určite vykoná akurát nedokáže nájsť .latte kam ťa po tej akcii má presmerovať.

Editoval Gavrilo (25. 8. 2019 22:16)

popcorn
Člen | 28
+
+1
-

Gavrilo napsal(a):

popcorn napsal(a):

Protože mě to přesměruje sem: http://prntscr.com/oxdnmq a nevykoná to tu query, která je v manageru.

Potrebuješ to nastaviť ako ajaxovu akciu prípadne jej nastaviť redirect.

Skús tam použiť toto:

public function actionLeaveTeam(): void
{
    $this->teamManager->leaveTeam();
    $this->redirect('Page:Default');
}

Query sa určite vykoná akurát nedokáže nájsť .latte kam ťa po tej akcii má presmerovať.

Nojo, máš pravdu… Já jsem ale vůl :-D

Díky moc všem! ;)