prezdivka z databaze a FILTER_OUT

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

Zdravim vsechny,

chtel bych se zeptat zkusenejsich, zda na tento ukol jdu dobre. Chci abych mohl pres svoje stranky zobrazit uzivatelsky profil na stranka.cz/username

Ceho jsem dosahl?
Kdyz zadam stranka.cz/username tak se mi zobrazi uzivatelsky profil

Jdu na to dobre?
je toto spravny zpusob nebo existuje nejaky jednodussi?

Co mi nefunguje?
Kdyz uzivatel klikne na profil, tak se mi zobrazi stranka.cz/profile/default/7 a ja presne nevim jak to prevest. myslel jsem ze to co vratim ve FILTER OUT se zobrazi misto URL to co ziskavam.

Je mozne, ze me to uplne preskoci toto pravidlo, protoze beru jen username? new Route(‚<username [a-zA-Z0–9_\-\.]+>‘

Muzete mi prosim poradit jak to opravit ci na ulohu jit jinak, popripade jednoduse popsat FILTER_OUT, protoze to moc nechapu.

	$router[] = new Route('<username [a-zA-Z0-9_\-\.]+>', array(
			'presenter' => 'Profile',
			'action' => 'default',
			'id' => array(
				Route::FILTER_IN => function($username) {
						$profilename = $this->database->table('users')->where(array("username" => $username))->fetch();
					if ($profilename)
						return $profilename->id;
					else
						return NULL;
				},
				Route::FILTER_OUT => function($id) {
					if (!is_numeric($id))
					{
						return $id;
					} else {
						$profilename = $this->database->table('users')->where(array("id" => $id))->fetch();
						//$alias = "alias".$this->lang;
						if ($profilename)
							return $profilename->username;
						else
							return NULL;
					}
				}
			)
		));
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
David Matějka
Moderator | 6445
+
0
-

V masce routy mas username a ve filtru id, musi to byt konzistentni.
Nebo muzes pouzit globalni filtr (trochu niz, pouze v en doc)
A nebo si vytvor vlastni router, inspirace zde

Zax
Člen | 370
+
+2
-

A nešlo by se na to úplně vykašlat, normálně si předávat username do presenteru a řešit to až v něm? Myslím, že už se tu někde řešilo, že nejlepší je v routeru vůbec do databáze nesahat (snad teď nekecám).