Quickstart: Dokončení základní aplikace – No route for HTTP request

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

Zdravím,
první příspěvek a hned dotaz.
S Nette a dibi se seznamuji, už jsem s jejich pomocí vytvořil aplikaci, ale ne v duchu MVP. Abych se do světa MVP dostal, ponořil jsem do Quickstartu a podařilo se mi v poklidu dojít až do fáze Dokončení základní aplikace.
Vše funguje do té doby, pokud nechci přidat nový úkol. Laděnka vypíše No route for HTTP request. Zkoušel jsem hledat, kde může být chyba, ale nechytám se (přitom třeba v kapitole Stránkování jsem chybu odhalil a opravil (model->totalTodoCount(); opravil na model->todoCount();)), ale tady opravdu nevím a zkoušel jsem hledat tady a nenašel. Tuším, že klíč se bude skrývat v presenteru a routování.
Mám tu

<?php
$router = $application->getRouter();
$router[] = new Route('index.php', array(
    'presenter' => 'Homepage',
    'action' => 'default',
), Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>', array(
    'presenter' => 'Todolist',
    'action' => 'show',
));
?>

Zkoušel jsem různě modifikovat, přesto výsledek stále stejný/podobný. Pokud místo „show“ dám „add“, tak mi formulář najede, ale pak zase nezavolám „show“.

Předem děkuji za odpověď či nakopnutí

P.S. Zkouším to na wAMPu

Editoval cmman (25. 3. 2010 20:18)

Ola
Člen | 385
+
0
-

Díky za tip u stránkování, opravil jsem to.

Ohledně rout, na jakou adresu se dostaneš když Ti to napíše tu chybu?

cmman
Člen | 8
+
0
-

Asi takhle,
pokud zadám http://localhost/…cument_root/, tak mi najede formulář (pokud zadám jako action „add“) nebo přehled úkolů (pokud zadám jako action „show“). Čili pokud se zavolá http://localhost/…odolist/show či http://localhost/…Todolist/add, naskočí výše zmíněná chyba. Pokud to tedy shrnu, relevantní výstup mám jen na adrese http://localhost/…cument_root/.

Ola
Člen | 385
+
0
-

Vypadá to na chybu s RewriteBase. Zkus v .htaccess v adresáři Todolist odkomentovat a upravit jeden řádek na RewriteBase /Todolist/document_root/.

cmman
Člen | 8
+
0
-

Bingo!

Není to sice v .htaccess v adresáři Todolist, ale až v document_root, ale je důležité, že to pomohlo. Pokud někdo bude tápat, tak .htaccess by měl vypadat asi takto.

<script>
# 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>
</script>

Ola, děkuji. Na tohle bych sám nepřišel.

Ola
Člen | 385
+
0
-

Jo, ten adresář má být samozřejmě tak, jak si ho napsal ty.

Jde ale o to, že rewritebase je specifický pro každý server a jeho konfiguraci a navíc i pro adresářovou strukturu, pokud je chyba taková, že se na žádnou jinou adresu odlišnou od „/“ nedá přistoupit, pak je chyba na 97% tam (zbýv. 3% vypnutý rewrite apod.).

Jinak není zač, snad se Ti Nette zalíbí :-)

Editoval Ola (25. 3. 2010 23:08)

cmman
Člen | 8
+
0
-

Nette se mi líbí. Usnadňuje hodně činností a zjednodušuje chápání mnoha věcí (Zendem jsem nepolíben). Pro mne je nový hlavně model MVP (Smarty na mě též nenechaly významnější stopy), na který si zvykám. (zní to jak marketingové žvásty, ale já to opravdu cítím ;-))

Pepča
Člen | 12
+
0
-

Ahoj,
mám stejný problém, tak jsem zkusil tento postup, ale satanužel to nevyšlo. Podíval jsem se tedy do httpd.conf a zjistil, že nemám aktivní mod_rewrite, pročež jsem modul přidal, s nadějemi restartoval servr a opět zkusil přidání úkolu, bohužel moje očekávání naplněno nebylo a z posledních sil sem píšu :( počítám, že to bude právě v Apači, ale nevím čím…

marek.dusek
Člen | 99
+
0
-

Mas pro dany adresar nastavene AllowOverride, resp. nacita se ti htaccess? (to, ze se nacita, lze jednoduse overit tak, ze do nej napises nejaky nesmysl – server by pak mel vratit 500)

Pepča
Člen | 12
+
0
-

jasně, že jo :)

Pepča
Člen | 12
+
0
-

Už jsem to zprovoznil…díky za nic :P

ivo_m
Člen | 1
+
0
-

Mám stejný problém, ale nepodařilo se mi to vyřešit. Mám Win XP, Apache 2.2.13, PHP 5.3.3. htaccess mi to čte – napíšu-li do něj bleble, vrátí mi 500. Hraju si s tím od večera a nejde a nejde. Napadá vás ještě něco? Děkuji.

Vyřešeno! Ještě jsem si trochu s tím pohrál, inspiroval se tady na fóru a je to takhle: měl jsem adresář todolist, ale odkaz byl http://localhost/…cument_root/. Aby to šlapalo bez problémů, musí být stejně velkými písmeny název adresáře, link k aplikaci i RewriteBase v htaccess. Uff.

Editoval ivo_m (7. 9. 2010 13:38)