Různé adresy pro jeden presenter aneb. jak na české adresy
- Northys
- Člen | 29
Čaute,
snad poprvé dělám na trochu větším projektu v Nette a používám
standartně anglické názvy tříd – problém je v tom, že web je pouze
pro čechy a tak jsou adresy example.com/objednavka/1-anglictina mnohem lepší
než example.com/order/1-anglictina. To bohužel zapříčinilo, že jsem začal
psát routu prakticky pro každý presenter (pro některé i dvě –
popíšu dál).
Tady je router:
public function createRouter()
{
Route::addStyle("name");
Route::setStyleProperty("name", Route::FILTER_OUT, function($url) {
return \Nette\Utils\Strings::webalize($url);
});
Route::setStyleProperty("name", Route::FILTER_IN, function($url) {
return \Nette\Utils\Strings::webalize($url);
});
Route::addStyle("language");
Route::setStyleProperty("language", Route::FILTER_OUT, function($url) {
return \Nette\Utils\Strings::lower($url);
});
Route::setStyleProperty("language", Route::FILTER_IN, function($url) {
return \Nette\Utils\Strings::lower($url);
});
$router = new RouteList();
$router[] = new Route('lektor/<name>', array(
'module' => 'Front',
'presenter' => 'professor',
'action' => 'profile'
));
$router[] = new Route('lektori', array(
'module' => 'Front',
'presenter' => 'professor',
'action' => 'default'
));
$router[] = new Route('kurzy/<language>', array(
'module' => 'Front',
'presenter' => 'courses',
'action' => 'search'
));
$router[] = new Route('o-nas', array(
'module' => 'Front',
'presenter' => 'About',
'action' => 'us'
));
$router[] = new Route('galerie', array(
'module' => 'Front',
'presenter' => 'About',
'action' => 'gallery'
));
$router[] = new Route('kurzy', array(
'module' => 'Front',
'presenter' => 'courses',
'action' => 'default'
));
$router[] = new Route('kontakt', array(
'module' => 'Front',
'presenter' => 'Contact',
'action' => 'default'
));
$router[] = new Route('nazory-studentu', array(
'module' => 'Front',
'presenter' => 'Testimonials',
'action' => 'default'
));
$router[] = new Route('<presenter>/<action>/<id>', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
$router[] = new Route('admin/<presenter>/<action>/<id>', array(
'module' => 'Admin',
'presenter' => 'Dashboard',
'action' => 'default',
'id' => NULL,
));
return $router;
}
můžete vidět, že některý presenter má i dvě routy – například example.com/lektori example.com/lektor/honza-novak
příjde mi, ale že něco dělám špatně – určitě to musí jít nějaký jednoduším (méně šíleným) způsobem. protože když jen zapřemýšlím nad tím, že bych měl udělat ještě jednou tolik presenterů, tak by se v tom nevyznal už nikdo.
chtěl bych se vás tedy prosím zeptat, jestli postupuji správným způsobem a nebo bych měl na routy přistupovat jinak. napadlo mě vytvořit nějaké pole presenter ⇒ cesky_preklad a to pak nějak předat routeru, jenže vůbec nevím jak. pomůžete mi prosím? :)
co se týče toho webu, tak jej můžete proklikat tady – Mediterin.cz – routování funguje perfektně, ale vážně mi můj způsob nepříjde jako efektivní, kdyby se měl web ještě rozrůst :(
Editoval Northys (3. 9. 2013 23:09)
- enumag
- Člen | 2118
https://doc.nette.org/…tion/routing#…
Použij FILTER_TABLE na presenter.
Editoval enumag (3. 9. 2013 23:54)
- Northys
- Člen | 29
nad tím jsem přemýšlel ale jak v tomhle udělám více adres pro jeden
presenter?
např.
example.com/lektori = Lector:default
example.com/lektor/jan-novak = Lector:profile, name ⇒ ‚Jan Novák‘¨
EDIT: když nad tím teď přemýšlím tak bych si mohl udělat to co jsi poslal jako poslední routu a tady to skloňování dát před to, když se routy berou postupně, viď?
Editoval Northys (5. 9. 2013 18:52)