Specificka routa a signal komponenty, wtf

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
bazo
Člen | 620
+
0
-

takto mam definovany router

<?php
		$webRouter	 = new RouteList('Front');
		$webRouter[] = new Route('index.php', 'Homepage:Default', Route::ONE_WAY);
		$webRouter[] = new Route('/', 'Homepage:default', $useHttps ? Route::SECURED : 0);
		$webRouter[] = new Route('/inzerat/<id>/<slug>', 'Detail:default', $useHttps ? Route::SECURED: 0);
		$webRouter[] = new Route('/favorites', 'Homepage:favorites', $useHttps ? Route::SECURED: 0);
		$webRouter[] = new Route('<presenter ^(?!.*detail).*$>/<action>[/<id>]', 'Homepage:default', $useHttps ? Route::SECURED: 0);
?>

odkazy napriamo mi generuje krasne

<?php
{link Detail: id => $listing->id, slug => $listing->slug} => inzerat/55e5f286b0d02aa01d0007b4/nadpis
?>

v komponente mam link na signal

<?php
<a n:href="open!">otvor</a>
?>

ked sa nachadzam na url inzerat/55e5f286b0d02aa01d0007b4/nadpis, cize presenter je Detail, id aj slug su spravne naplnene

tak komponenta generuje odkaz pomocou default routy a dostanem **/detail/default/55e5f286b0d02aa01d0007b4?do=facebookButton-open **
tento odkaz samozrejme nie je funkcny

ak zakazem pre default routu hodnotu presentera detail

<?php
<presenter ^(?!.*detail).*$>
?>

tak mi nettecko zahlasi Invalid link: No route for Front:Detail:default(id=55e5f286b0d02aa01d0007b4, do=facebookButton-open)

a teraz neviem, ci som blby ja, alebo to proste nejde. ale takto nemozem mat fb login alebo inu komponentu na stranke detailu, co je dost nanic.

za kazdu radu dakujem

edit: takze robi pre hociaky signal, aj pre signal priamo z presenteru

Editoval bazo (3. 9. 2015 22:14)

bazo
Člen | 620
+
0
-

riesenie je si oznacit id a slug v detail presenteri ako persistentne. vtedy sa odkazy vygeneruju spravne.

tak to je pre mna mega wtf.

Lukeluha
Člen | 130
+
0
-

Zkus přejmenovat parametr id na něco jiného (třeba itemId). Nette parametry id používá pro identifikátory komponent a už mockrát mně tady na tom vyškolilo :)

David Grudl
Nette Core | 8218
+
0
-

Prenaseji se parametry:

  • uvedene v linku
  • persistentni
  • v pripade signalu (nebo this) take parametry, ktere ma v signature prislusna metoda renderXyz() nebo actionXyz()

Takze resení je:

  • uvest ty parametry v link (u komponent nevhodne)
  • nastavit je jako persistentni
  • pridat je do signatury renderDetail (asi nejvhodnejsi)
David Matějka
Moderator | 6445
+
0
-

v pripade signalu take parametry, ktere ma v signature prislusna metoda renderXyz()

jeste doplnim: action* metody jsou preferovany pred render* metodama. A tenhle bod plati nejen pro signal, ale i pro odkazovani na this

David Grudl
Nette Core | 8218
+
0
-

@DavidMatějka díky, doplnil jsem to

@Lukeluha Nette urcite parametr id nijak nevyuziva.

Lukeluha
Člen | 130
+
0
-

@DavidGrudl v tom případě to bude ještě v něčem jiném, protože opravdu už jsem na to několikrát narazil, i lidem tady to pomohlo.

Víš o co se tedy jedná, prosím tě?