Více posílaných atributů, ne všechny viditelné v url

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

Ahoj,

totálně začátečnícký dotaz, řekl bych :) Řekněme že si u určitých dat v databázi (mám např auto) potřebuji uchovávat dvojí id. Číselné autoinkrementální a string, který je třeba výsledkem webalize fce z názvu (našeho auta). Protože ale je určitá pravděpodobnost, že ačkoliv se objekty reálného světa budou v názvu lišit, výsledek webalize bude stejný. Ten string používám pro cool url, ale protože je možné, že v db bude více oněch string id, chci se na ně odkazovat tím autoinkrementálním, ale zároveň s zachovaným textovým id v url. Omluvte krkolomnost vysvětlení :D
poradíte prosím jak na to? Tak, aby v url nebylo číselné id vidět, ale přesto jsem ho „nějak“ předal?

Moc díky :)

redhead
Člen | 1313
+
0
-

Pokud víš, že jsou možné dva stejné webalized názvy, tak určitě ne. Když pak uživatel zadá adresu example.com/skoda-felicia-kombi a v db budou 2 stejné názvy, jak se pak aplikace rozhodne, který z nich zpracovat?

Normálně se to dělá tak, že se do url dá jak id, tak slug. Třeba example.com/851-skoda-felicia-kombi

pidiclovek
Člen | 91
+
0
-

Díky, to jsem si myslel, napadly mě vlastně jen dvě možnosti, jak tohle řešit – posláním id POSTEM, což mi nepřijde moc košéř, nebo použití obojího. Musím si takhle obojetné id spojit a pak zase roztrhnout, či je na to Nette nějak připraveno?

EDIT:\\ O posílání více proměných vím, ale to mi vygeneruje něco jako /skoda-felicie?id=666

Editoval pidiclovek (12. 10. 2011 22:38)

mkoubik
Člen | 728
+
0
-

Jenom si dej do routy:

$router[] = new Route('<id>-<slug>', array(
	'presenter' => 'NazevPresenteru',
	'action' => 'nazevAkce',
));

v presenteru:

public function actionNazevAkce($id, $slug) {
	...
}

a pak odkazuj {plink NazevPresenteru:nazevAkce id => 123, slug => blablabla}.

pidiclovek
Člen | 91
+
0
-

mkoubik napsal(a):

Jenom si dej do routy:

$router[] = new Route('<id>-<slug>', array(
	'presenter' => 'NazevPresenteru',
	'action' => 'nazevAkce',
));

Přesně tohle jsem hledal, díky za pomoc!