Nefunguje routing
- Jakub Lédl
- Člen | 55
Snažím se naprogramovat aplikaci v Nette frameworku, a zdálo se, že vše funguje, dokud jsem nechtěl aktivovat routing. Jelikož jsem se do začátku řídil hlavně tutoriálem, tak mám doporučenou adresářovou strukturu atd. Toto je bootstrap.php:
<?php
require_once LIBS_DIR . '/nette/loader.php';
Environment::loadConfig();
Debug::enable();
$application = Environment::getApplication();
$router = $application->getRouter();
$router[] = new Route('index.php', array(
'presenter' => 'Default',
'view' => 'default',), Route::ONE_WAY);
$router[] = new Route('<controller>/<action>/<id>', array(
'presenter' => 'Default',
'view' => 'default',
'id' => NULL,));
$application = Environment::getApplication();
$application->run();
?>
a .htaccess
# disable directory listing
Options -Indexes
# configure PHP
# <IfModule mod_php5.c>
# php_flag magic_quotes_gpc off
# php_flag register_globals off
# </IfModule>
# mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>
A pokud naviguji na „/“, dostanu adresářovou strukturu, pokud jdu na „/document_root“, vyhodí mi Nette BadRequestException (No route for HTTP request). Už mi z toho jde hlava kolem, protože sem předtím dlouho používal ASP.NET MVC. Budu vděčný za každou radu.
P.S.: Tak mě napadá: Beží to na W7 a ComplexWebServer. Nevím, jak pan Ponkrác řeší apache moduly, ale možná, že se nenačítá mod_rewrite?
- Ondřej Mirtes
- Člen | 1536
Chyba je v:
$router[] = new Route('<controller>/<action>/<id>', array(
'presenter' => 'Default',
'view' => 'default',
'id' => NULL,));
V definici routy má být <presenter>
namísto
<controller>
.
Editoval LastHunter (28. 9. 2009 21:24)
- Jakub Lédl
- Člen | 55
Né, já už jsem asi blbej. Ono totiž ASP.NET je MVC, ne MVP :-D
Takže jsem to rozjel (ještě to chtělo nahradit v defaultních parametrech ‚view‘ za ‚action‘), jenom ještě drobný detail: Navigace na „/“ mi pořád zobrazuje directory listing, defaultní presenter s defaultní akcí dostanu až pokud jdu na „/document_root“. Zkoušel jsem i různé blbosti z RewriteBase, ale nic nefunguje. Ještě jednou tedy prosím o pomoc.
EDIT: Jo, Ola a redhead byli rychlejší.
Editoval Jakub Lédl (28. 9. 2009 21:37)
- Panda
- Člen | 569
Jakub Lédl napsal(a):
Né, já už jsem asi blbej. Ono totiž ASP.NET je MVC, ne MVP :-D
Takže jsem to rozjel (ještě to chtělo nahradit v defaultních parametrech ‚view‘ za ‚action‘), jenom ještě drobný detail: Navigace na „/“ mi pořád zobrazuje directory listing, defaultní presenter s defaultní akcí dostanu až pokud jdu na „/document_root“. Zkoušel jsem i různé blbosti z RewriteBase, ale nic nefunguje. Ještě jednou tedy prosím o pomoc.
EDIT: Jo, Ola a redhead byli rychlejší.
Obsah (obsah, ne složka) složky document_root
, jak název
poněkud zákeřně napovídá, by se měl umístit přímo do rootu webu.
Složky app
a libs
by z webu naopak přístupné být
neměly – cestu k nim určíš v index.php
z
document_root
(tzn. v rootu webu). Pokud z nějakého důvodu
nemůžeš tyto složky oddělit (např. nedovolí Ti to hosting), můžeš je
(složky, ne jejich obsah) umístit také do rootu webu, ale musíš si
zajistit, aby se nepovolané osoby nedostaly k souborům typu
config.ini
(kde bývají například hesla k databázím) a spol.
Výchozí .htaccess
umístěný v těchto složkách se o to
postará.