Single Point Entry met url

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees Mulder

Kees Mulder

22/04/2020 14:53:29
Quote Anchor link
Ik ben over gegaan op een single point entry website. Heb onderstaande in code in de index.php file.

Als ik een leden overzicht wil dan krijg ik www.site.nl/leden (en geeft hij leden.php weer). Nu wil ik een lid en zou dan het volgende willen intikken: www.site.nl/leden/pieter-dekker. Alleen weet ik niet zo goed hoe ik dit kan doen met de code.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
42
43
44
<?php
// Read REQUEST_URI, suppress errors (gave E_WARNING prior to PHP 5.3.3).
$uriData = @parse_url($_SERVER['REQUEST_URI']);

$path = '';
if ($uriData === false) {
    // Do something?
} else {
    if (isset($uriData['path'])) {
        // We might be in a subdirectory of the webroot.
        // We are only interested in the part starting from this relative root.

        $path = str_replace(DIRECTORY_SEPARATOR, '/', $uriData['path']);
        $relativePath = str_replace(DIRECTORY_SEPARATOR, '/', dirname($_SERVER['SCRIPT_NAME']));
        // Strip the relative path from $path.
        $path = substr($path, strlen($relativePath));
        // Finally, strip any leading/trailing slashes so we end up with a "cleaned" path.
        $path = trim($path, '/');
    }
}


$pathParts = explode('/', $path);

if (empty($pathParts[0])) {
    
    include('homepage.php');

}
else {
    // controleer hier eerste deel van applicatiepad
    switch ($pathParts[0]) {
        case
'leden':
            // do stuff;
            include 'leden.php';
        break;
        // et cetera
        case 'over':
            include 'over.php';
            break;
        case
'nieuws':
            include 'nieuws.php';
            break;
        default:
// niet-bestaande pagina, toon 404
    }
}

?>
Gewijzigd op 22/04/2020 14:54:51 door Kees Mulder
 
PHP hulp

PHP hulp

16/08/2022 09:28:51
 
- Ariën  -
Beheerder

- Ariën -

22/04/2020 14:59:32
Quote Anchor link
$pathParts[1] al geprobeerd?
Doe anders eens

print_r($pathParts)

Dan zie je al je argumenten in je URL.
 
Thomas van den Heuvel

Thomas van den Heuvel

22/04/2020 15:25:39
Quote Anchor link
Dit zou je ook kunnen combineren met een autoloader, dan heb je dat hele switch-statement niet nodig. En wat voor aanpak je ook kiest, een autoloader kan je hierin zeker helpen.

Een mogelijke strategie is dat je de URL "opeet" totdat je een class/PHP-bestand vindt met een overeenkomstige naam (en pad).

Dit lijkt mij de simpelste manier.

Anders zul je letterlijke URLs moeten gaan matchen met een lijst zoals je hierboven doet of via de database.

Maar dat leent zich weer niet echt voor URLs die deels vast (/leden/pietje-puk) en deels variabel/dynamisch (/leden/pietje-puk) zijn.

Wat ik wel vrees is dat je niet zomaar wat code kunt knippen en plakken en dat je dan in een keer een complete applicatie hebt die werkt. Je zult hier een systeem omheen moeten bouwen (of in ieder geval een minimale hoeveelheid werk verzetten zoals de eerste bovengenoemde strategie) om dit aan de praat te krijgen.

Dit vergt echt wat extra (denk)werk en structurering van code.
Gewijzigd op 22/04/2020 19:24:52 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.