Různé adresy pro jeden presenter aneb. jak na české adresy

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

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

https://doc.nette.org/…tion/routing#…
Použij FILTER_TABLE na presenter.

Editoval enumag (3. 9. 2013 23:54)

Northys
Člen | 29
+
0
-

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)