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?

Alvast bedankt

Gebruik je een Router in PHP?
Maak je een gebruik van bepaalde frameworks? Of is het een zelfgeschreven class?
@Davier het is een zelfgeschreven class

[size=xsmall]Toevoeging op 11/06/2018 17:04:55:[/size]

- Ariën - op 11/06/2018 16:10:50

Gebruik je een Router in PHP?


@- Ariën -. Ja ik gebruik een Router
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.
Heb je wat relevante code van je framework?
** quoteknip**

@- Ariën -. Wat zou je willen zien. Dit is bijvoorbeeld een gedeelte van de Router:

<?php
return [
    'default' => '/page',
    'errors'  => '/error/:code',
    'routes'  => [
	
	    // Front-end			
        '/page(/:action(/:id))' => [
            'controller' => 'Controller_Page',
            'action' => 'index',
        ],	
		
		'/error(/:code)' => [      
            'controller' => 'Controller_Error',
            'action' => 'index',
        ],
		
        '/(:action(/:id))' => [
            'controller' => 'Controller_Page',
            'action' => 'index',
        ], 
		   		
    ]
];
?>

Wat wil je dat ik nog meer toon?
Ervan uitgaande dat jouw router een class is, dan kun je als voorbeeld volgorde doen in je controller class:

<?php

require 'pad/naar/router.php'

use somenamespace\Router as route;
$route = new Route;

$route->get('/page/{:action}/{:id}', function($name, $id){
echo "name: $name id: $id"; // test.......
});
?>
**quoteknip**

Nee de Router is geen Class

Wat is je class dan wel? een normale function?
is het niet een idee om dit naar een class om te bouwen?
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).

Reageren