Hoe maak ik een id uit een controller beschikbaar in een andere controller in dezelfde class
Door
Donald Boers
op 11-06-2018 15:59
gewijzigd op 11-06-2018 18:29
5.003 views
Ik heb een id in een Controller. Deze is gegenereerd als iemand op een link in een listing heeft geklikt:
blog_posts/post/2
waar 2 de id is waar ik op doel. Vervolgens heb ik die id nodig voor verdere verwerking. Eerst had ik deze gecombineerd met mijn JS functies, maardiversen mensen rade mij af om JS met PHP te combineren dus mijn vraag is: Hoe maak ik deze id beschikbaar in een andere controller die wel in dezelfde class aanwezig is?
Hoe komt de URL tot stand? Vaak heb je zowel een mechanisme voor een interne notatie met een geprogrammeerde vertaling naar een externe notatie en andersom. Dit valt onder de noemer "routing" binnen je applicatie.
Het is nogal handig als je hier een soort van integrale aanpak voor verzint, zodat je hier geen omkijken meer naar hebt.
Wat is die "verdere verwerking"? Is dat heel veel later (afhankelijk van iets waar de gebruiker op klikt), of is dat iets wat eigenlijk direct na de eerste action komt (bijvoorbeeld als gevolg van een redirect)?
Als het "veel later" is zou ik zelf de waarde aan de client meegeven (in een hidden veld, of als var in JS). Voor de "volgende request" kun je deze waarde dan weer gebruiken om de URL voor de request op te bouwen. Nadeel is dan dat de gebruiker de waarde aan kan passen, maar in plaats van blog_posts/post/2 kan ie ook blog_posts/post/'"<script>alert(1235)</script) meegeven, dus de code om dat ID te controleren moet je toch al ergens hebben. Eventueel kun je nog een controle hash toevoegen, waardoor je (ook) kunt controleren dat het ID niet door de gebruiker kan zijn aangepast.
Als het "direct" is zou je het ID in de session op kunnen slaan. Dan weet je zeker dat de gebruiker 'm niet kan veranderen. Nadeel van sessions is dat ze op een gegeven moment verlopen (als de gebruiker te lang geen interactie met je site heeft). Ook kan dit spaak lopen als de gebruiker zich niet aan het door jouw bedachte "pad" houd (dat heb je al heel snel als ze bijvoorbeeld 2 verschillende posts in 2 tabbladen open hebben staan - die delen dan dezelfde sessie).