action=„error: No route for
- Tom_as
- Člen | 28
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
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
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');
- Patrik Votoček
- Člen | 2221
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).