Routa ktora ma vstupe parameter pre default action, alebo zavola action ktora je v presentri definovana
- duskohu
- Člen | 778
Caute, snazim sa napisat routu ktora bude smerovat na default presenter.
Presenter ma akciu default a tato ma parameter pageId na ktorom mam filtre ktore
prekladaju pageId na nazov stranky.
Takze mam www.myweb/mypage.
To mi funguje dobre, len neviem ako mam urobit ked si chcem do toho presentra
pridat napr. ActionTest a zadam www.myweb/test aby mi zavolalo akciu test. Cize pokial najde
v danom presentru akciu zavola tu, inak pozrie ci na zaklade filtra nenajde tu
stranku a presmeruje na default action s parametrom. Nevie niekto poradit?
$pageRepository = $this->pageRepository;
Route::addStyle('pageId');
Route::setStyleProperty('pageId', Route::PATTERN, ".*");
Route::setStyleProperty('pageId', Route::FILTER_IN, function ($url) use ($pageRepository) {
$urlElenent = $pageRepository->findOneBy(array('urlSlug' => $url, 'status' => 1));
if ($urlElenent != FALSE) {
return $urlElenent->id;
}
});
Route::setStyleProperty('pageId', Route::FILTER_OUT, function ($url) use ($pageRepository) {
if (!is_numeric($url)) {
return $url;
}
$urlSlug = $pageRepository->findOneBy(array('id' => $url, 'status' => 1));
if ($urlSlug != FALSE) {
return $urlSlug->urlSlug;
}
return $url;
});
$router[] = new Route('<pageId>', 'Default:Front:Default:default');
// toto mam pre ostatne presentri a akcie
$router[] = new Route('<presenter>/<action>[/<id>]', array(
'module' => 'Default:Front',
'presenter' => 'Default',
'action' => 'default',
));
Editoval duskohu (10. 6. 2013 15:24)
- David Matějka
- Moderator | 6445
neco podobnyho jsem psal tady https://forum.nette.org/…ple-com-nick tak se muzes inspirovat. pokud by se v tvem pripade jednalo o jediny presenter (a tedy jedinou tridu) stacilo by podedit Route a do metody match pridat jen neco jako
$request = parent::match($httpRequest);
if(!$request || !method_exists('FooPresenter', 'action' . $request['action'])) {
return NULL;
}
return $request;
- duskohu
- Člen | 778
Skusal som pridat routu specialne pre akciu test, ale prehliadat na mna zacne nadavat:This webpage has a redirect loop ked zadam www.myweb/test, a to uz nechapem preco
$router[] = new Route('test', array(
'module' => 'Default:Front',
'presenter' => 'Default',
'action' => 'test',
));
// toto mam pre ostatne presentri a akcie
$router[] = new Route('<presenter>/<action>[/<id>]', array(
'module' => 'Default:Front',
'presenter' => 'Default',
'action' => 'default',
));