problém s routami v nette

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

Ahoj,
(asi 3 dny se učím pracovat s nette, takže píšu do začátečníků…)

Postupuju podle manuálů na stránce. Povolím mod_rewrite .htacces který mám v root_projektu/www/.htacces. V bootstart.php mám tyto routy:

$router[] = new NRoute('index.php', array(
		'presenter' => 'Homepage',
		'action' => 'default',
	), NRoute::ONE_WAY);

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

	$router[] = new NRoute('<presenter>/<action>', array(
		'presenter' => 'Homepage',
		'action' => 'add',
	));

(jestli tutorialu o routach dobře rozumím, ta poslední routa je tam zbytečná. ale dal jsem si jí tam… doufám že tím nic nekazím.)

Zde mám kód presenteru:

<?php
class HomepagePresenter extends BasePresenter {

  protected function startup() {
    // konstruktor
    parent::startup();
  }

	public function renderDefault() {
		$this->template->message = 'default';
	}

	public function renderAdd() {
	 $this->template->message = 'add';
  }

}

V templates/Homepage mám add.phtml ve kterém je {block content} <p>{$message}</p>.

V prohlížeči dám http://127.0.0.1/blog/www/add/ a vyskočí na mě:

NBadRequestException #404

Cannot load presenter ‚Add‘, class ‚AddPresenter‘ was not found in ‚C:\Program Files\EasyPHP-5.3.8.0\www\blog\www/../app/presenters/AddPresenter.php‘.

Nechápu kde dělám chybu. Zkoušel jsem do adresáře presenters dát soubor AddPresenter.php který obsahuje třídu AddPresenter s metodou renderAdd a souborem add.phtml v templates. Já bych si přál mít v adresáři Homepage soubor add.phtml a vyvolávat si ho metodou renderAdd ve třídě HomepagePresenter.

Děkuji za rady. :)

Jan Endel
Člen | 1016
+
0
-

Pěkně si to rozebereme na základní routě:

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

první řádek nám udává, jak url vypadá, 2–4 řádek defaultní parametry, pokud nejsou v url zadány, jelikož ti projekt běží na adrese http://127.0.0.1/blog/www/add čili se to bere postupně od toho www, čili add se namapuje na proměnou presenter, action se veme z defaultních hodnot jako default a id NULL.

Pokud chceš dosáhnout toho, aby jsi viděl to co máš v šabloně add tak to je na adrese http://127.0.0.1/blog/www/homepage/add pokud se ti tam to homepage nelibí, můžeš si nadefinovat vlastní routu ve tvaru třebas:

$router[] = new NRoute('add', array(
               'presenter' => 'Homepage',
               'action' => 'add',
       ));

čímž řekneš aplikaci že na url http://127.0.0.1/blog/www/add se nachází stránka Homepage:add, ovšem ještě pozor, routy se vyhodnocují zvrchu dolů, čili pokud router narazí na vyhovující routu, přesune se tam, čili ten add musíš dát na čelní místa. Snad se mi povedlo ti to osvětlit.

xolax
Člen | 2
+
0
-

Ahoj, děkuju za odpověď. Už jsem (snad) pochopil jak to funguje.