Routa ktora ma vstupe parameter pre default action, alebo zavola action ktora je v presentri definovana

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

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

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

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',
		));