Quickstart: Dokončení základní aplikace – No route for HTTP request
- cmman
- Člen | 8
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)
- cmman
- Člen | 8
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/.
- cmman
- Člen | 8
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
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)
- Pepča
- Člen | 12
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
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)
- ivo_m
- Člen | 1
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)