action=„error: No route for

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

Ahojte,

už delší dobu se trápím z problémem routrování aby fungoval formulář, který mě hlasí:

action=„error: No route for Main:contact(do=formContact-submit)“

Zkoušel jsem různé kombinace ale na moc jsem toho nepřišel ani fórum nebylo moc chytré k mé otazce.
Moje routry jsou:

<?php

$router[] = new Route('<lang cz|en|de|fr>/<html kategorie|category|categorie>/<category>/<pages>/', 'Category:category');
$router[] = new Route('<lang cz|en|de|fr>/<html kategorie|category|categorie>/<category>/', 'Category:category');

//Nahled pisma
$router[] = new Route('<lang cz|en|de|fr>/<html pismo|font|polices|schriftart>/<font>/', 'Font:font');

//Vyhledavani
$router[] = new Route('<lang cz|en|de|fr>/<html hledej|search|rechercher|suchen>/<word>/<pages>/', 'Category:category');
$router[] = new Route('<lang cz|en|de|fr>/<html hledej|search|rechercher|suchen>/<word>/', 'Category:category');
$router[] = new Route('<lang cz|en|de|fr>/<html hledej|search|rechercher|suchen>/', 'Category:category');

//Top fonts
$router[] = new Route('<lang cz|en|de|fr>/<html top>/<page>/', 'Category:category');
$router[] = new Route('<lang cz|en|de|fr>/<html top>/', 'Category:category');


$router[] = new Route('<lang cz|en|de|fr>/<html contact|kontakt>/', 'Main:contact');
$router[] = new Route('<lang cz|en|de|fr>/<html upload>/', 'Main:upload');

//Homepage
$router[] = new Route('<lang cz|en|de|fr>/<pages [0-9]+>/', 'Category:category');
$router[] = new Route('<lang cz|en|de|fr>/', 'Category:category');

//Defaultni homepage (jiz nastavene presmerovani)
$router[] = new Route('/', array('presenter' =>'Category','action' =>'category','lang' =>'en'));

?>
Tom_as
Člen | 28
+
0
-

Tak jsem došel na jednu věc. Když dám

<?php
$router[] = new Route('<lang cz|en|de|fr>/contact/', 'Main:contact');
?>

Tak vše funguje jak má a na form se dá action="en/conctact?do=… Jenže takto bych musel udělat 4 routry což se mě zdá jako zbytečnost. Víte někdo o lepším řešení?

Editoval Tom_as (11. 11. 2011 17:53)

Patrik Votoček
Člen | 2221
+
0
-

co to je to „html“? (protože v tom je tvůj problém)

zkus:

$router[] = new Route('<lang cz|en|de|fr>/(contact|kontakt)/', 'Main:contact');
// resp.
$router[] = new Route('<lang cz|en|de|fr>/<? contact|kontakt>/', 'Main:contact');
Tom_as
Člen | 28
+
0
-

Promena html v tomto pripade je opravdu k nicemu jinak v nem prevadim promenou pro jeden presenter. Jinak receno mam jeden presenter v kterem prenasil promenou html a podle toho se upravuje SQL dotaz pro model.

Tom_as
Člen | 28
+
0
-

(contact|kontakt) – vyhazuje No route for HTTP request

<? contact|kontakt> – No route for Main:contact(lang=en)

Popravde netusim co s tim. Vidim to asi na 4 routry.

Editoval Tom_as (11. 11. 2011 18:41)

Patrik Votoček
Člen | 2221
+
0
-

no jasý ono to ani nemůže fungovat! jak má nette asi vědět co jestli má vygenerovat odkaz s ‚contact‘ nebo s ‚kontakt‘. Nette si prostě neumí hodit kostkou.

šlo by to řešit nějak takto:

$router[] = new Route('/<lang cs|en|fr|de>/<action (kontakt|contact)>/', array(
    'presenter' => "Main",
    'action' => array(
        Route::FILTER_IN => array(
			'kontakt' => 'contact',
        ),
    )
));

//resp.

$router[] = new Route('/<lang cs|en|fr|de>/<action (kontakt|contact)>/', array(
    'presenter' => "Main",
    'action' => array(
        Route::FILTER_IN => function($s) {
        	return 'contact';
		},
		Route::FILTER_OUT => function($s) {
        	return 'contact';
		},
    )
));

problém je že by to generovalo vždy:

/en/contact
/de/contact
/fr/contact
/cs/contact

takže řešením je napsat si vlastní routu (protože zpracování každé routy je celkem náročná operace takže ti nemůžu doporučit udělat pro každý případ novou routu).