Ako na dynamicke url a routovanie

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

Zdravim,

som zaciatocnik (uplny) s Nette a nerozumiem ako spravit aby som si napriklad ak mam URL:

example.com/item-I/

example.com/item-II/

example.com/item-III/

nechcelo vytvarat vzdy novy presenter a novy template, ale aby to priamo bralo s BasePresenteru, pretoze item-I, je vlastne premenna, podla ktorej vyberam z DB, vlastne taka kategoria.

teraz ma v bootstrap.php route z niektoreho prikladu:

<?php
$router[] = new Route('<presenter>/<action>/<id>', array(
	'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
));
?>

Pokial si dam example.com/item-I , tak mi to krici:
Cannot load presenter ‚Item-I‘, class ‚Item-IPresenter‘. Pokial vytvorim novy presenter v zlozke Presenters a novy Template v zlozke v Templates, tak to funguje, najcita kod odtial. Ale ono to tak nema fungovat, nemozem vytvarat stale nove a nove, ked sa mi tie Item-? budu vytvarat dynamicky a z DB. Asi mi nieco uslo a nepochopil som ako na to.

Inak cim viac tutorialov a navodov, tym lepsie…

diky za pomoc…

Mesiah
Člen | 240
+
0
-

Musíš je vytvářet, protože máš tak napsané routovací pravidlo. '<presenter>/<action>/<id> je tzv. maska, která říká: to co příjde v url, rozsekej a postupně aplikuj: presenter pak action a pak id.
Pokud to chceš tahat z db, tak na foru se to řešilo třebas tady:

https://forum.nette.org/…pe-routovani?…
https://forum.nette.org/…ovnove-routy?…

snad jsem ti pomohl…

Panda
Člen | 569
+
0
-

Začni něčím jednodušším, ona routa, která bude matchovat jen na základě existence záznamu v databázi, není zas tak triviální.

Přidej si před onu proměnnou nějaký prefix, například clanek/ – pak zajistíš, že se na daný presenter přesměruje jen požadavek, který začíná na řetězec clanek/. Pokud by tam nebyl, tak se routa vybere vždy a to, že položka neexistuje, zjistíš až v cílovém presenteru. A to už je pozdě, nefungovala by Ti pak už žádná jiná routa.

$router[] = new Route('clanek/<slug>', array(
        'presenter' => 'Article',
        'action' => 'default'
));
class ArticlePresenter extends BasePresenter
{
	public function renderDefault($slug)
	{
		$article = ... // výběr z databáze podle slugu
		if (!$article) {
			$this->setView('notFound');
		} else {
			$this->template->article = $article;
		}
	}
}

Až Ti to všechno bude fungovat, tak koukni na odkazy v tomto příspěvku: https://forum.nette.org/…iewtopic.php?…

mrako
Člen | 3
+
0
-

diky za odkazy, kukam na to uz… Inak clovek cakal nieco lahsie, zda sa mi to ako spanielska dedina, hlavne po tom, ako som sa dival na formulare, ktore vypadaju paradne a cakal som, ze to pojde lahko…

mrako
Člen | 3
+
0
-

tak pravdu povediac, naozaj som cakal nieco ine, nieco viac automaticke, hlavne, ked nieco sa dynamicky taha hlavne z DB.

Asi by to chcelo nejaky tutorial, kde by to bolo ukazane odzaciatku… alebo som skor nepochopil cely system „route“ alebo som uplne „blby“ (co bude asik najblizsie) :)

Mesiah
Člen | 240
+
0
-

Routy jsou těžké téma samo o sobě. Aji pan Grudl to přiznává. Každopádně nevěš hlavu, všechno chce čas. Taky bych byl pro nějaký tutorial, nebo pořádný text, co je projde od začátku do konce.
Jinak si člověk přečte dokomentaci, koukne na screencasty a pak ještě procházet forum aby pochopil základy, u kterých stejně dojde k závěru: aha, tak tohle funguje takto, ale proč nemám tušení… (viz ´#´ u stylu rout)