Předání objektu metodě link

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

Ahoj, zajímala by mě jedna věc ohledně routování.
Dejme tomu že mám jednoduché CMS s články a na hlavní stránce mám 10 nejnovějších článků. Byl jsem zvyklý psát v šabloně něco takového:

<a n:foreach="$articles as $article" n:href="Article:view $article->id">{$article->title}</a>

Je to sice použitelné, ale co když chci mít v adrese místo id článku jeho jméno? Nette by mělo být na adresách nezávislé, je tedy nejspíš blbost začít předávat $article->title místo $article->id. Nejlepší by asi bylo předávat celý objekt $article, ale na to mi Nette hlásí, že objekt nemohl být převeden na řetězec. Abych si v routeru selectoval článek z databáze kvůli zjištění jeho jména, když už ho přitom mám jednou selectnutý mi nepřijde moc hezké. Měl bych tedy objekt serializovat? To mi také nepřijde úplně nejlepší… Mohl by mi nějaký profík ukázat kousek kódu, jak to řeší on? :)

Předem díky za odpovědi

_Martin_
Generous Backer | 679
+
0
-

Nette by mělo být nezávislé na podobách adres, nicméně to, co ty řešíš, není podoba adresy. Adresy slouží jenom jako způsob, jak volat nějakou metodu s nějakými parametry. A ty jsi se v tuto chvíli rozhodl volat metodu view s parametrem title (či spíš url) namísto id.

Nicméně, mě by se také líbilo mít možnost předávat jako parametr rovnou objekt – a nejlépe ten samý objekt rovnou dostávat jako parametr metody view. To si ovšem žádá změny v Nette – možná přepsání metod pro generování odkazů, určitě přepsání routeru (resp. napsání vlastního).

Filip Procházka
Moderator | 4668
+
0
-

V routeru je na to podmínka, objekty to odmítá. Jedině udělat vlastní router, nebo předávat ID.

spidy
Člen | 55
+
0
-

A jak to řešíte vy? Máte na to někdo napsaný vlastní router? Hrozně bych ocenil nějaké ukázky kódu, nejlépe z nějaké reálné aplikace.