No route for HTTP request
- peci1
- Člen | 60
Ahoj, jen chci reportnout neco, s cim jsem se nejakou dobu pral a nakonec vyresil ;)
Zalozil jsem si uplne cerstvou aplikaci s routama ze Skeletonu a pokud jsem dal z browseru request na homepage (tj. prazdna relativni cesta), bylo vse ok. Jakmile jsem ale chtel libovolnou jinou action nebo presenter, Ladenka hlasila „No route for HTTP request“.
Po nekolika minutach zoufalosti jsem prisel na chybu – slozka s webem mela v nazvu velka pismena a ja je v browseru psal mala. Po oprave jejich velikosti vse slape jako hodinky.
PS: nevim, zda je to chovani bug nebo ne, to asi necham posoudit erudovanejsi Nettisty…
- Mikulas Dite
- Člen | 756
Zatím jsou v Nette většinou názvy case-sensitive, ale až David bude předělávat ConventionalRenderer https://forum.nette.org/…0-radku-kodu, tak se to možná změní, viz. link.
- psimekjr
- Člen | 20
Mám stejný problém, změna velikosti písmen však nepomohla.. vycházím z tutoriálu statický web v nette..
<?php
//router pro mod rewrite
$router[] = new Route('index.php', array(
'presenter' => 'HomePage',
'action' => 'default',
), Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>/<id>', array(
'presenter' => 'HomePage',
'action' => 'default',
'id' => NULL,
));
?>
localhost/xxx/document_root/ me hodi na uvodni stranku
localhost/xxx/document_root/nazev_presenteru me hodi 404
- Ondřej Mirtes
- Člen | 1536
A máš v document rootu správný .htaccess?
Tvůj problém je trochu jiný, autorovi tématu šlo o to, že se mu vyhodila Laděnka s hláškou, ty dostáváš 404ku (nejspíš od Apache) a Nette se ke slovu vůbec nedostane.
- Ondřej Mirtes
- Člen | 1536
Aha, promiň, tak v tom v případě tvůj presenter se pravděpodobně jmenuje HomepagePresenter, přitom v routách máš HomePage (velké P).
- psimekjr
- Člen | 20
Ano, díky, to je určitě chyba. Ale po opravě problém přetrvává.
basepresenter
<?php
abstract class BasePresenter extends Presenter
{
public $oldLayoutMode = FALSE;
public function beforeRender()
{
$this->template->menuItems = array(
'Homepage:' => 'Home',
'Delicious:' => 'Delicious'
);
}
}
?>
bootstrap
<?php
// Step 4: Setup application router
$router = $application->getRouter();
$router[] = new Route('index.php', array(
'presenter' => 'Homepage',
'action' => 'default',
), Route::ONE_WAY);
$router[] = new Route('<presenter>', array(
'presenter' => 'Homepage',
'action' => 'default'
));
?>
html
<li class=„current“><a href=„/xxx/document_root/“>Home</a></li>
<li ><a href=„/xxx/document_root/delicious“>Delicious</a></li>
no route for http request mi pak vyhodí
/xxx/document_root/delicious
/xxx/document_root/homepage
projde
/xxx/document_root/
- Ondřej Mirtes
- Člen | 1536
A co když místo té druhé routy dáš tuto?
$router[] = new Route('<presenter>/<action>', array(
'presenter' => 'Homepage',
'action' => 'default',
));
- psimekjr
- Člen | 20
Možná je problém přece jen v .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 /
# 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>