Scripts

Object<->URL converter

2 functies, waarmee je gemakkelijk een Object omzet naar een url voor zoeken. Of een url weer terug omvormen naar een object. Ik heb dit geschreven, omdat ik er altijd beetje moe van werd om enorme "GET" urls te schrijven, en overal rekening mee moest houden. Nu heb ik gewoon een zoek object gemaakt, en ik kan makkelijk dingen toevoegen en wijzigen, en daar vanuit makkelijk de URL maken. Opzich zal je Object naar URL niet vaak gebruiken, maar het is wel makkelijk als je oude zoek gegevens wilt opslaan, en dan kan je makkelijk weer dit resultaat ophalen. Gebruik: Een object naar URL Voor URL naar Object, moet je eerst een instantie aanmaken van het object, dit omdat het anders onmogelijk word om te bepalen welke klasse moet worden aangemaakt en dergelijken. Je kan optioneel zelf de url tekst meegeven (dus zoek.php?iets=niets&niets=iets) en je kan meegeven of je gebruik maakt van setters, Hij maakt standaard gebruik van setters, want dat doe ik ook, wil je geen URL tekst gebruiken, en ook geen Setters, geef dan deze parameters mee: ($object, null, false) URL naar Object Er is ook nog een derde functie, die maakt een array met de naam van alle klasse variablen. voor de rest weinig spannends daar. Op- en Aanmerkingen zijn welkom.

objecturl-converter
<?php
/**
 * @author Nico Kaag
 * @copyright 2009
 */

/**
 * @Description Maakt een URL (vanaf het ?) vanuit een Object
 * @Param $object : Object() : Het object waaruit de URL moet worden gecreƫrd
 * @return : String : een url vanaf het ?
 */
function ObjectToUrl($object) {
	// Maak lege array aan om te vullen met de waardes
	$array = array();
	// Cast het Object naar een Array en loop deze door
	foreach ((array)$object as $key => $value) {
		// Even de Key waarde opschonen door de klasse naam eruit te halen, en de eerste twee tekens verwijderen.
		$key = str_replace(get_class($object), '', $key);
		$key = substr($key, 2);
		// Voeg gegevens toe aan de array
		$array[$key] = $value;
	}
	
	// Begincode van de URL
	$url = "?";
	$i = 0;
	// Loop de array
	foreach($array as $key => $value) {
		// Als er geen waarde is, doen we lekker niks
		if (!empty($value)) {
			// Als we nog bij de eerste zijn, dan geen & ervoor, want we hebben het ? al
			if ($i != 0) {
				$url .= '&';
			}
			$i++;
			// Spaties vervangen door underscores
			$value = str_replace(' ', '_', $value);
			// URL opbouwen, En nog een urlencode over de Value, zodat deze geen erros gaan veroorzaken.
			$url .= $key .'='. urlencode($value);
		}
	}
	// Geef de URL terug
	return $url;
}

/**
 * @Description Maakt van een opgegeven URL een object naar keuze
 * @Param $object : Object() : Een instantie van een Object die moet worden gevuld
 * @Param $url : String : De url waaruit het object moet worden gemaakt, Gebruik "null" om de algemene "$_GET" te gebruiken
 * @Param $useSetter : Boolean : true als er gebruik word gemaakt van setters (standaard), anders false
 */
function UrlToObject($object, $url = null, $useSetter = true) {
	// Even een lijst maken met alle variablen in de klasse
	$objectVars = getObjectVariables($object);
	// Als er geen URL is opgegeven, dan lopen doen wij het gewoon via de GET
	if ($url == null) {
		// een loop door de Get
		foreach ($_GET as $key => $value) {
    		// Kijken of de variable ook echt in de klasse bestaat
    		if (in_array($key, $objectVars)) {
    			// Als er setters worden gebruikt
    			if ($useSetter) {
    				// Maak de naam van de set Functie, en roep deze aan, en haal er ook meteen een urldecode overheen
    				$setMethod = 'set'. ucfirst($key);
    				$object->$setMethod(urldecode($value));
    			} else {
    				// Zet de variable met een url_decode, WERKT NIET MET PRIVATE OF PROTECTED OF STATIC VARIABLEN
					$object->$key = urldecode($value);
				}
			}
    	}
    } else {
    	// Data opdelen vanaf de vraagteken
		$data = explode('?', $url);
		// Alles voor het vraagteken uit de array schoppen
		array_shift($data);
		// De rest van de data doorlopen.
		foreach ($data as $item) {
			//Opdelen in tussen de &
			$item = explode('&', $item);
			// Alles doorloopen
			foreach ($item as $subItem) {
				// verdelen op de =
				$subItem = explode('=', $subItem);
				// de Key staat voor de =
				$key = $subItem[0];
				// underscores vervangen door spaties
    			$value = str_replace('_', ' ', $subItem[1]);
    			// Kijken of de variable ook echt in de klasse bestaat
    			if (in_array($key, $objectVars)) {
	    			if ($useSetter) {
						// Maak de naam van de set Functie, en roep deze aan, en haal er ook meteen een urldecode overheen	    				
    					$setMethod = 'set'. ucfirst($key);
	    				$object->$setMethod(urldecode($value));
	    			} else {
	    				// Zet de variable met een url_decode, WERKT NIET MET PRIVATE OF PROTECTED OF STATIC VARIABLEN
						$object->$key = urldecode($value);
					}
				}
			}
		}
	}
	// Geef het object terug
	return $object;
}

/**
 * @Description Maakt een lijst met alle klasse variablen van de opgegeven klasse
 * @Param $object : Object() : Het object waarvan de variablen moeten worden gevonden
 * @Return : Array() : met alle klasse variablen
 */
function getObjectVariables($object) {
	// Maak array aan om te vullen en te returnen
	$array = array();
	// Cast Object naar een array en loop hem door, Waarbij Key de variable naam is, met de klassenaam tussen 2 onbekende tekens ervoor
	foreach ((array)$object as $key => $value) {
		// Vervang de Klasse naam met niks, en verwijder de eerste 2 karakters.
		$key = str_replace(get_class($object), '', $key);
		$key = substr($key, 2);
		// Voeg de variable naam toe aan de Array
		$array[] = $key;
	}
	// Geef de array terug
	return $array;
}
?>

Reacties

0
Nog geen reacties.