Gå til innhold

Merkelig feil i URL-håndteren min.


Anbefalte innlegg

Holder på å skrive en URL-håndterer til prosjektet mitt, men har et problem her.

Greia er at den ikke legger inn riktig verdi for de forskjellige elementene, som du kan se i eksempelet her:

 

http://rodtang.zapto.org/error/+id/45343/+...use/+animal/dog

Her skal id=45343, item=house og animal=dog, men som dere ser på siden så er det ikke det som kommer opp.

 

Her er mockup-koden jeg skrev for å håndtere URLen, litt rustent:

private function parse_request($controller_uri){
$parsed_request = null;								
$request_array = preg_split('/\//', $controller_uri, -1, PREG_SPLIT_NO_EMPTY);	# Split ut the request into an array, deleting all empty elements
$this->controller_name = strtolower($request_array['0']);			

$request_array = array_slice($request_array, 1);				# Slice of the module name
if(count($request_array) == '1'){
	$parsed_request['id'] = $request_array['0'];
}else{
	foreach($request_array as $request_item){
		if($request_item{0} =='+'){
			$request_name = substr($request_item, 1, strlen($request_item));
			$request_content = next($request_array);
			$parsed_request[$request_name] = $request_content;
		}
	}
}
return $parsed_request;
}

$controller_uri = /error/+id/45343/+item/house/+animal/dog

 

Er sikkert noe skikkelig teit siden koden ikke er så overiktlig som den burde være.

 

Takker for alle svar!

Endret av Rabbid
Lenke til kommentar
Videoannonse
Annonse

Noe sånt kanskje?

 

<?php
$uri = "/+key/value/+i/a";
$parts = explode("/",$uri);
$params = array();

for($k=0; $k<sizeOf($parts); $i++) {
if(substr($parts[$k],0,1) === "+") {
 $params[substr($parts[$k],1)] = (array_key_exists($parts,$k+1)) ? $parts[++$k] : null);
}
}

Endret av MC2
Lenke til kommentar

MC2: Forslaget ditt funket fint, men har kommet over en ny idé nå, som jeg gjerne skulle likt deres mening på.

 

Istedet for det jeg har nå tenkte jeg på noe som dette:

/bugs (leder til bugs-modulen)

/bugs:34344 (leder til bugs-modulen og gir den verdien 34344 som id)

/bugs/tag:FIXED (leder til bugs-modulen og gir den verdien "FIXED" som tag)

 

Er denne er den med masse plusser best?

 

Et lang url blir til sammenligning slik:

/bugs/sort:id/filter:fixed/date:2008/maintainer:hans

/bugs/+sort/id/+filter/fixed/+date/2008/+maintainer/hans

Endret av Rabbid
Lenke til kommentar

Hvorfor ikke ha noen patterns til forskjellige muligheter?

 

Feks.

/bugs (til bugs generelt eller hva det skulle være)

/bugs/1293 (matcher tallene)

/bugs/something (hvis ikke tall må det være tag ?)

 

Men altså hvorfor skal du ha dette istedet for vanlig ?key=value etc.? Det var er jo laget for en grunn.

 

Når man som oftest pleier å ha en slik løsning med at query verdier kommer rett i pathen er når man prøver å oppnå en trestruktur for innholdet. Feks. på dagbladet ser pathene sånn ut /nyheter/2008/04/09/532041.html, da ser du /<kategori>/<år>/<måned>/<dag>/<artikkel id>. Altså, det er grunn den delen heter "path".

 

Når det kommer til det siste eksemplet så burde du nok bruke den vanlige query løsningen (med ?=&) for at det ikke er struktur i den URIen.

Lenke til kommentar

Syns ?key=value gir så vanvittig stygge lenker, men trenger noe for å enkelt gi informasjon til modulene. Det siste eksempelet var nå ikke realistisk, var bare for å vise dem begge ved siden av hverandre.

 

Systemet inneholder ganske mange forskjellige moduler som akkurat nå mottar informasjon gjennom masse "?key=value"-greier som ikke er særlig oversiktlig eller spent. Alt jeg har satt inn her er eksempler og ikke særlig strukturerte.

Endret av Rabbid
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...