cool URl

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

Zdravím, asi si budete myslet, že jsem fakt lama (což nejspíš jsem), ale opravdu mi furt nejde do hlavy, jak používat to routování. Z dokumentace jsem si převzal úsek kódu a upravil jsem ho podle mých potřeb. Požadované URL jsem dosáhl, ale aplikace mi při kliknutí na odkaz hlásí chybu Error 404 - Objekt nenalezen. Přikládám ještě kod routeru + URL, na kterou se dostanu kliknutím na odkaz. Adresářovou strukturu mám v pořádku a všechny potřebné složky a soubory jsou tam, kde mají být (aplikace mi předtím fungovala v pořádku, ale po úpravě routeru bohužel přestala :-( ).

$application = Environment::getApplication();
$router = $application->getRouter();

if (function_exists('apache_get_modules') && in_array('mod_rewrite', apache_get_modules())) {

$router[] = new Route('index.php', array(
    'presenter' => 'dpp',
    'action' => 'default',
), Route::ONE_WAY);

// deklarace obecné dvousměrné routy s cool-url tvarem
$router[] = new Route('<presenter>/<action>/<id>', array(
    'presenter' => 'dpp',
    'action' => 'default',
    'id' => NULL,
));

} else {
    $router[] = new SimpleRouter('dpp:default:default');
}

Adresa, na kterou se dostanu kliknutím na odkaz: http://localhost/deardpp/document_root/dpp/top-comments/

Kompletní chybová hláška, která se mi zobrazí nad výše zmíněnou URL:

Objekt nenalezen!

Požadované URL nebylo na tomto serveru nalezeno. Zdá se, že odkaz na odkazující stránce je chybný nebo zastaralý. Informujte, prosím, autora této stránky o chybě.

Pokud si myslíte, že toto je chyba serveru, kontaktujte, prosím, webmastera.

Error 404

localhost
16.9.2009 19:09:01
Apache/2.2.12 (Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0 mod_perl/2.0.4 Perl/v5.10.0

Omlouvám se, jestli se to tu už někdy řešilo, ale nenašel jsem příspěvek, který by mi pomohl.

Ondřej Mirtes
Člen | 1536
+
0
-
  1. Název presenteru začíná velkým písmenem, takže musíš mít v app/presenters třídu DppPresenter a v routách ho tak taky pojmenovat:
$router[] = new Route('index.php', array(
    'presenter' => 'Dpp',
    'action' => 'default',
), Route::ONE_WAY);

// deklarace obecné dvousměrné routy s cool-url tvarem
$router[] = new Route('<presenter>/<action>/<id>', array(
    'presenter' => 'Dpp',
    'action' => 'default',
    'id' => NULL,
));

} else {
    $router[] = new SimpleRouter('Dpp:'); //tady jsi měl o jedno 'default' víc, navíc tam nemusí být ani to jedno, stačí název presenteru a dvojtečka
}
  1. Podle všeho se požadavek k Nette vůbec nedostane a jelikož aplikace pokročilé routy nadefinuje, tak je problém ve tvém .htaccess (ve složce /deardpp/document_root/). zkusil bych být tebou následující nastavení:
# configure PHP
php_flag magic_quotes_gpc off
php_flag register_globals off

# mod rewrite
RewriteEngine On
RewriteBase /deardpp/document_root

# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(css|js|pdf|ico|gif|jpg|png|rar|zip|tar\.gz)$ index.php [L]

Editoval LastHunter (16. 9. 2009 19:26)

chemikus
Člen | 47
+
0
-

Děkuju moc. Jsem opravdu pěkný pako O:-)