De URL class af maken
Om het niet al te langdradig te maken, ga ik niet alle code meteen mee geven.
In ieder geval hebben we nu dus 5 instantie variabelen:
uri, nodes, firstNode, lastNode, root.
Om hier getters en setters voor te maken hou je rekening met de naamgeving. Een getter begint met "get" en een setter met , je raadt het al, een "set".
Als we dus een getter voor nodes maken, doen we dus:
Als we dus een setter maken, doen we:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
public function setNodes ($array)
{
//$this->nodes is de instantie variabele
// $array is een lokale variabele, welke we aan
// $this->nodes binden
$this->nodes = $array;
}
?>
public function setNodes ($array)
{
//$this->nodes is de instantie variabele
// $array is een lokale variabele, welke we aan
// $this->nodes binden
$this->nodes = $array;
}
?>
Als we dit voor alle 5 de velden doen, krijg je dus een lange lap met 10 methods.
Nu we alle rompslomp geregeld hebben, kunnen we de daadwerkelijke logica opzetten. Om te beginnen hebben we een URI REQUEST nodig. Althans, een string die deze terug geeft. Een URI REQUEST kan namelijk leeg zijn, remember ;)
Om hier op verder te gaan, we zullen eerst het volledige adres moeten verkrijgen. Dit kunnen we opvragen met $_SERVER['PHP_SELF']. Dit geeft in ons eerdere voorbeeld zoiets als:
1. http://www.domein.nl/index.php
Omdat we die index.php niet leuk vinden, en we deze al wegfilteren door middel van de HTACCESS, gaan we dat hier ook doen.
Code (php)
De $index geeft nu een positie terug vanaf waar gerekend kan worden.
$root gaat nu dus de PHP_SELF bij langs, en gaat de string opknippen vanaf het einde, tot en met de plek van wat $index geeft.
Dus:
1. http://www.domein.nl/index.php
$index = 21 ( tel maar na )
$root is dus nu de complete string vanaf het einde tot 21.
In dit geval is het dus helemaal leeg.
Maar als we nu een URL zouden opgeven zoals bijvoorbeeld deze:
2. http://www.domein.nl/artikel/nummer
Dan is onze $root dus gelijk aan : "artikel/nummer".
Zoals je kunt zien gebruik in het voorbeeld de / als scheiding. Dit kun je gewoon doen, omdat we in de .HTACCESS controleren of het hier niet om een bestand of map etc gaat, dus kunnen we de / gebruiken om onderscheid te maken tussen verschillende pagina`s.
Je kunt ook een ander teken gebruik als je wil. Bijvoorbeeld een & of een ?. Zolang het een geldig teken is, kun je het als seperator gebruiken!
Ik gebruik dus de / omdat deze gewoon het duidelijkste is.
Vervolgens gaan de $root gebruiken om te filteren met de $_SERVER['REQUEST_URI']. De REQUEST_URI methode geeft alles na de root weer. dus in ons geval bijvoorbeeld: index.php of /artikel/nummer
Vervolgens halen we onze laatste / weg, voor de netheid:
Nu hebben we een hele string welke overeen kan komen met bijvoorbeeld: nieuws/categorie/artikel
Alleen de string is niet genoeg, we willen hier een array van maken!
Een array maken van een string kan op meerdere manieren, maar omdat we een standaard seperator gebruiken ( en nogmaals, je mag hier zelf ook wat invullen ) gaan we de string opknippen:
Dat is alles eigenlijk :D
Maar omdat we met een klasse werken, zouden we eigenlijk onze instantie variabelen moeten gebruiken.
Omdat een constructor altijd aangeroepen wordt als een object geinstantieerd ( aangemaakt wordt ), gaan we nu een method schrijven welke aangeroepen zal worden in de constructor.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
public function UrlDispatcher ()
{
// body van de constructor
$index = strrpos( $_SERVER['PHP_SELF'] , "index.php");
$root = substr( $_SERVER['PHP_SELF'] , -0 , $index );
// Stel de instantie variabele van root in
$this->setRoot($root);
// Vervang de root met de huidige URI
$argument = str_replace( $this->getRoot() , "" ,$_SERVER['REQUEST_URI'] );
// Maak een URI string, en strip de laatste /
$this->setUri(trim($argument, "/"));
// Zorg ervoor dat alle nodes in een array komen
// de String die we gebruiken halen we op door de method getUri()
$this->setNodes(explode("/", $this->getUri()));
// Nu alles verder afgehandeld is, kunnen we de eerste en laatste node ophalen
$this->createNodes();
}
?>
public function UrlDispatcher ()
{
// body van de constructor
$index = strrpos( $_SERVER['PHP_SELF'] , "index.php");
$root = substr( $_SERVER['PHP_SELF'] , -0 , $index );
// Stel de instantie variabele van root in
$this->setRoot($root);
// Vervang de root met de huidige URI
$argument = str_replace( $this->getRoot() , "" ,$_SERVER['REQUEST_URI'] );
// Maak een URI string, en strip de laatste /
$this->setUri(trim($argument, "/"));
// Zorg ervoor dat alle nodes in een array komen
// de String die we gebruiken halen we op door de method getUri()
$this->setNodes(explode("/", $this->getUri()));
// Nu alles verder afgehandeld is, kunnen we de eerste en laatste node ophalen
$this->createNodes();
}
?>
De mensen die nog opletten na deze lange tutorial merken dat er een method aangeroepen wordt genaamd $this->createNodes();
Deze methode set het eerste en laatste node.
Hieronder de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
public function createNodes ()
{
// sla alle nodes op in een lokale variabele
$nodes = $this->getNodes();
// Controleer of $nodes een eerste rij heeft ( een array begint met 0 )
if(isset($nodes[0]))
{
// Deze is nog vrij makkelijk, als er een rij is op 0, is dat onze eerste node
$this->setFirstNode($nodes[0]);
}
// Gooi de array over de kop, eerste wordt laatste en vice versa
$reversedNodes = array_reverse($nodes);
// Lijkt raar, maar nu hebben we ook de laatste node.
// Als er maar 1 URI string is opgegeven, krijg je dus hetzelfde resultaat als de eerste
$this->setLastNode($reversedNodes[0]);
}
?>
public function createNodes ()
{
// sla alle nodes op in een lokale variabele
$nodes = $this->getNodes();
// Controleer of $nodes een eerste rij heeft ( een array begint met 0 )
if(isset($nodes[0]))
{
// Deze is nog vrij makkelijk, als er een rij is op 0, is dat onze eerste node
$this->setFirstNode($nodes[0]);
}
// Gooi de array over de kop, eerste wordt laatste en vice versa
$reversedNodes = array_reverse($nodes);
// Lijkt raar, maar nu hebben we ook de laatste node.
// Als er maar 1 URI string is opgegeven, krijg je dus hetzelfde resultaat als de eerste
$this->setLastNode($reversedNodes[0]);
}
?>
De uitleg staat in de code. Ik gebruik de array om door heen te lussen. Mocht je nou bijvoorbeeld veel nodes willen gebruiken, kun je ook meerdere instantie variabelen aan maken. Dit is OPTIONEEL, omdat je dit vaak niet nodig zult hebben.
En hou er rekening mee dat wanneer je dit dynamisch doet, je alsnog getters moet hebben om de waardes op te halen!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
class UrlDispatcher
{
// optioneel
private $node1;
private $node2;
private $node3;
private $node4;
private $node5;
/**
* Optionele method om gewoon alle nodes te nummeren en in de instantie variabelen te zetten
*/
public function createNummericNodes ()
{
// sla alle nodes op in een lokale variabele
$nodes = $this->getNodes();
// Als die geset is, en $nodes[0] is aanwezig
if(isset($nodes[0]))
{
// Lokale variabelen
$string = "node";
$counter = 1;
foreach($nodes as $node)
{
// Creer de naam voor de instantie variabele door "node" en het huidige nummer aan elkaar
// te plakken. Deze kun je vervolgens door $$ te gebruiken, als nieuwe naam voor je
// variabele opgeven
$tmp_name = $string.$counter;
$this->$$tmp_name = $node;
// Werk de counter bij, tel er 1 bij op
$counter++;
}
}
}
?>
class UrlDispatcher
{
// optioneel
private $node1;
private $node2;
private $node3;
private $node4;
private $node5;
/**
* Optionele method om gewoon alle nodes te nummeren en in de instantie variabelen te zetten
*/
public function createNummericNodes ()
{
// sla alle nodes op in een lokale variabele
$nodes = $this->getNodes();
// Als die geset is, en $nodes[0] is aanwezig
if(isset($nodes[0]))
{
// Lokale variabelen
$string = "node";
$counter = 1;
foreach($nodes as $node)
{
// Creer de naam voor de instantie variabele door "node" en het huidige nummer aan elkaar
// te plakken. Deze kun je vervolgens door $$ te gebruiken, als nieuwe naam voor je
// variabele opgeven
$tmp_name = $string.$counter;
$this->$$tmp_name = $node;
// Werk de counter bij, tel er 1 bij op
$counter++;
}
}
}
?>
« vorige pagina | volgende pagina »
Inhoudsopgave
- HTACCES gebruiken
- De index.php maken
- De URL class schrijven
- De URL class af maken
- Ter afsluiting de code