nefungující routování – upravený příklad quickstartu

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

Zdravím, snažím se přijít na to, jak používat routování, ale tady jsem naprosto vytuhl. Mám projekt TodoList, mám HomepagePresenter v něm tři view default, edit, delete. Předesílám, že mod_rewrite mám povolen. Při zadání adresy htpp://localhost/TodoList/document_root mi Laděnka hlásí „BadRequestException #404 No route for HTTP request“.

Zde je obsah .htaccess:

# disable directory listing
Options -Indexes

# configure PHP
# <IfModule mod_php5.c>
#    php_flag magic_quotes_gpc off
#    php_flag register_globals off
#    php_flag zend.ze1_compatibility_mode off
# </IfModule>

# mod_rewrite
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteBase /TodoList/document_root/

	# front controller
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>

Zde je fragment bootstrap.php

<?php
$router = $application->getRouter();

$router[] = new Route('uvod', array(
	'presenter' => 'Homepage',
	'action' => 'default',
));

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

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

Díky za odpověď.

Foowie
Člen | 268
+
0
-

Tak máš definované, co má nette zobrazit při zadání adresy document_root/uvod, document_root/edit/CISLO, document_root/delete/CISLO a ty po něm chceš aby zobrazilo document_root/. Nejdříve mu definuj co má v tom případě zobrazit :)

doomed
Člen | 17
+
0
-

Aha :) Jsem úplnej začátečník, takže mě musíš brát s rezervou. Když ale změním ‚uvod‘ na ‚index.php‘ chová se to stejně. Tak nevím, co s tím, co tam napsat?

Foowie
Člen | 268
+
0
-

Když tam dáš index.php tak budeš mít definováno document_root/index.php, ale pořád ne document_root/ :)))

Když se podíváš do quick startu tak tam je něco takového:

// tahle část definuje co se má dělat při document_root/index.php
// parametr Route::ONE_WAY znamená že se z téhle routy nebudou generovat odkazy
$router[] = new Route('index.php', array(
    'presenter' => 'Homepage',
    'action' => 'default',
), Route::ONE_WAY);
// Tady je definovaná routa ve tvaru document_root/PRESENTER/ACTION/ID
// V dalším parametru (v poli) jsou definovány defaultní hodnoty jednotlivých parametrů
// Pokud tyto parametry nejsou v URL přítomny, doplní se z defaultních hodnot
$router[] = new Route('<presenter>/<action>/<id>', array(
    'presenter' => 'Homepage',
    'action' => 'default',
    'id' => NULL,
));

Pokud bys měl tedy jen document_root/ tak z ukázky v quick startu se ti request přeloží podle druhé z rout. Jelikož do URL nebyl přidán žádný parametr, pokusí se dosadit z defaultních hodnot.

doomed
Člen | 17
+
0
-

Ještě jsem si mezitím pročítal fórum a tvůj příspěvek mě ujistil, že už jsem trochu v obraze. Díky. Omlouvám se za banální dotaz.