Newsgroup: it.comp.www.php
Titolo: Accesso ricorsivo ad oggetto tramite REST

Scusate il subject, ma non saprei descriverlo meglio.
Sto sviluppando un piccolissimo progetto che dovrà
ricevere dati in REST.
La URI dovrebbe essere di questo tipo:
/nomeRisorsa/ID/sottoElemento/ID2/altroElemento/ID3
e così via.
Maggiori sono gli elementi, più definita sarà la ricerca.
Mi piacerebbe poter evitare il dover esplodere la stringa
ed elaborare in base alla presenza o meno dei parametri e
preferirei fare un qualcosa di questo tipo:
$mioOggetto->{$ID}->{sottoElemento}->{ID2}->{altroElemento}->{$ID3}
In questo modo posso navigare tramite URI dentro il mio oggetto
e preoccuparmi quindi di eseguire azioni in base al metodo invocato
(PUT,DELETE,GET,POST)
Ad esempio, nel caso ci fosse un PUT, dovrei prendere l'elemento
indicato dalla URI e sostituirlo in toto con quello passato dalla
richiesta stessa in formato XML.
Non ho la più pallida idea di dove cominciare.
Qualche esempio?
Se può interessare uso Kohana ma senza il modulo REST, che non mi è
piaciuto affatto. Sto facendo il modulo da per me.

 $mioOggetto->{$ID}->{sottoElemento}->{ID2}->{altroElemento}->{$ID3}
Al momento mi vengono in mente solo soluzioni statiche, ovvero
contare il numero di parametri presenti e la loro tipologia.
Ad esempio:
se son presenti 0 parametri, ovvero viene invocata solo la risorsa,
faccio un GET prendendo tutti gli elementi di tale risorsa.
Se è presente un parametro ed è un intero, faccio il get e prendo
i dati della risorsa avente id = $ID
se son presenti 2 parametri, il primo intero ed il secondo pari
al nome di uno degli elementi dell'array, ritorno solo tale
elemento associato a tale risorsa con id = $ID
se sono presenti 3 parametri, ID + elemento + ID, ritorno l'elemento
avente id = $ID2, dell'elemento "elemento" della risorsa con id = $ID
Così facendo, risolvo abbastanza bene, ma devo fare un routing statico
da paura, nel caso avessi 10 livelli di dettaglio in cui scendere.
in tal caso sarebbero almeno 11 rotte statiche (i 10 livelli più il
primo generico)
Idee migliori?
-- 
Non tocca a noi dominare tutte le maree del mondo,
il nostro compito è di fare il possibile per la
salvezza degli anni nei quali viviamo,
sradicando il male dai campi che conosciamo.

i dati della risorsa avente id = $ID
Diciamo che $ppar è la lista dei tuoi parametri, e $obj è il tuo
oggetto.
	function returnObj($obj, &$ppar)
	{
		if (0 == count($ppar))
			return $obj;
		$par0	= array_shift($ppar);
		if (is_numeric($par0))
		{
			if (isset($obj[$par0]))
				return returnObj($obj[$par0], $ppar);
			// Gestire errore
		}
		if (isset($obj->$par0))
			return returnObj($obj->$par0, $ppar);
		// Gestire errore
	}
	// Estraggo $ppar da $_REQUEST
	...
	// Calcolo $obj da $_REQUEST o da URL
	...
	// 
	if (false == ($ret = returnObj($obj, $ppar)))
		exit();
	// serializzo $obj e invio
Leonardo buttante là
-- 
The thoughts of others were light and fleeting,
Of lovers' meeting, or luck, or fame.
Mine were of trouble, and mine were steady:
So I was ready when trouble came.

 
[cut]
In pratica tu crei un array in base alla stringa
passata come URI, cicli ciascun elemento di questo
array e ne verifichi la presenza o meno dentro l'oggetto
in questione.
Se è presente un elemento, continui con il ciclo finchè
non arrivi fino in fondo al tuo array di elementi.
Arrivato in fondo (o all'ultimo elemetno dell'oggetto)
esci visualizzando il valore.
