Routa – Skrýt presenter v URL

Danny
Člen | 146
+
+1
-

Zdravím,
chtěl bych se zeptat jak je možné skrýt presenter v URL adrese.

Mám PagesPresenter.php

public function renderPage($url)
{
	// ..
	$this->template->render('cesta'.$url.'latte');

}

který vypisuje šablony podle action($url), jedná se jenom o statické šablony které se berou lokálně, takže ve výsledku url vypadá takto:

.cz/pages/informace
.cz/pages/kroky

Potřeboval bych nějak skrýt název toho presenteru (pages) v URL adrese, pomocí route.

Aby cokoliv v pages vypadalo takto

.cz/informace
.cz/kroky

Věděl by někdo jak na to?

Díky moc :)

CZechBoY
Člen | 3608
+
0
-
$router = new RouteList();
$router[] = new Route('<url>', 'Pages:page');
Danny
Člen | 146
+
0
-

CZechBoY napsal(a):

$router = new RouteList();
$router[] = new Route('<url>', 'Pages:page');

Díky za odpoveď. Tohle mi ale rozhodí celou ostatní logiku, takže pokud budu mít orders:default nebo něco jiného tak se to bude zobrazovat špatně

Editoval Danny (14. 9. 2017 21:08)

matopeto
Člen | 395
+
0
-

To ze mas aj ine presentre a logiku nemozeme vediet :) posli nam tu svoj aktualny router :)
V tom tvojom url parametru moze byt uplne hocico? alebo iba nejaky vycet poloziek?

Editoval matopeto (14. 9. 2017 21:19)

Danny
Člen | 146
+
0
-

No já myslím úplně to základní logiku která je v routě, tu mi to rozbije, nebo ne?

V tom url parametru bude vždycky název šablony na základě kterého se to pak includne, jde jenom o statický stránky.

Mám tam toto:

	public static function createRouter()
	{
		$router = new Routers\RouteList;

		$cRouter = new Routers\RouteList('Frontend');
		// $cRouter [] = new Routers\Route('<url>', 'Pages:page');
		$cRouter [] = new Routers\Route('<presenter>/<action>[/<id>]', 'Homepage:default');
		$router[] = $cRouter ;

		return $router;
	}

Editoval Danny (14. 9. 2017 21:26)

matopeto
Člen | 395
+
0
-

Ked tam pridas to co mas zakomentovane tak ti to nic nerozbije…

Danny
Člen | 146
+
0
-

No pokud se chci dostat na jiný presenter

např.

order:default

Tak nefunguje tak jak má, resp mě směruje na Pages:page

Viz obrázek
https://gyazo.com/…f5455b68b660

Editoval Danny (15. 9. 2017 8:18)

Danny
Člen | 146
+
0
-

Nějaký nápad prosím? :)

Danny
Člen | 146
+
0
-

bump

Martk
Člen | 652
+
+2
-

Tohle by mělo jít:

		$router = new RouteList;

		$pages = ['informace', 'kroky'];

		$router[] = new Route('<page>', [
			'presenter' => 'Homepage',
			'action' => 'page',
			'page' => [
				Route::FILTER_IN => function ($page) use ($pages) {
					if (in_array($page, $pages)) {
						return $page;
					}

					return null;
				}
			],
		]);
		$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
Danny
Člen | 146
+
0
-

Funguje! super přesně tohle jsem potřeboval díky moc :)