Ako napísať vlastny router?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- PhelixMad
- Člen | 36
Kedže routovanie mi moc do hlavy nejde, tak sa chcem spýtať ako poriešiť routovanie, tak aby som nemal milion statických rout?
Napriklad:
$router[] = new Route('kontakt', 'Page:kontakt');
$router[] = new Route('o-mne', 'Page:omne');
$router[] = new Route('portfolio', 'Page:portfolio');
...
Napriklad ako napisat routu, tak aby iba pri PagePresenter bralo v url action. Alebo ako by ste to spravili vy?
- F.Vesely
- Člen | 369
https://github.com/…tatic-router pro staticke routy
Tvuj pripad bych resil pres parametr v default action Page presenteru a setView.
Neco jako:
$router[] = new Route('<slug>', 'Page:default');
function actionDefault($slug) {
$this->setView($slug);
}
nebo lepe mit stranky v db a pak mit:
function renderDefault($slug) {
$this->template->page = $this->pagesManager->findBySlug($slug);
}
Editoval F.Vesely (17. 7. 2015 0:24)
- PhelixMad
- Člen | 36
momentálne som to vyriesil asi takto:
Router
$router[] = new Route('<action>', 'Page:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
PagePresenter
class PagePresenter extends BasePresenter
{
public function renderDefault($slug)
{
if(empty($slug)) {
$this->forward('Homepage:default');
}
}
}
Neviem či to nazvať best practise ale funguje to. Forward je preto lebo redirect sa mi zasekne v slučke, kvoli route.