Nefunguje routing

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

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
+
0
-

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)

redhead
Člen | 1313
+
0
-

a v defaultních hodnotách action namísto view

Ola
Člen | 385
+
0
-

Ještě místo view má být action (jako klíč v poli parametrů)

Jakub Lédl
Člen | 55
+
0
-

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
+
0
-

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á.

Jakub Lédl
Člen | 55
+
0
-

Tak jsem to nakonec rozchodil. Díky všem za pomoc!