Router

Ons router.php file is redelijk onoverzichtelijk. Hieronder een mogelijkheden om het op te schonen.

Maak een functie in functions.php

function route($route, $endpoint, $toegang = true)
{
    $uri = trim(parse_url($_SERVER['REQUEST_URI'])['path'], "/");
    if ($uri != $route) {
        return;
    }
    if (!$toegang) {
        http_response_code(403);
        require "view/403.view.php";
        return;
    }
    if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/" . $endpoint)) {
        require $endpoint;
        die(); //niet verder zoeken onze route is gevonden
        return;
    }
    http_response_code(404);
    require "view/404.view.php";
    return;
}

Uitleg code:

  1. Kijk of de route de huidige route is
    Ja -> Ga door
    Nee -> Stop met uitvoeren (dit is niet de gevraagde route)
  2. Is er toegang
    Ja -> ga door
    Nee -> 403 reponse (geen toegang)
  3. Bestaat het bestand (controller of view)
    Ja -> require ...
    Nee -> 404 reponse (pagina niet gevonden)

Omdat we in het begin alle / verwijderen van de route hoeft deze ook niet meer vergelijken te worden.

Onze route.php krijgt dan de inhoud

<?php
//ROUTER
// Hier doen we een controle of een bepaalde URL bestaat en we verwijzen door naar een controller of een view

route("index", "controllers/home.php");
route("home", "controllers/home.php");
route("", "controllers/home.php");
route("contact", "controllers/contact.php");
route("about", "controllers/about.php");

//Alleen als je ingelogd bent
route('berichten', "controllers/bericht.index.php", isLogin());
route('lees-bericht', "controllers/bericht.read.php", isLogin());
route('schrijf-bericht', "controllers/bericht.create.php", isLogin());
route('wijzig-bericht', "controllers/bericht.update.php", isLogin());
route('verwijder-bericht', "controllers/bericht.delete.php", isLogin());

route('login', 'controllers/login.php');

//alleen toegankelijk als administrator
route('users', 'view/users.zoeken.view.php', hasRole('admin'));
route('search-users', "api/users.search.php" . hasRole('admin'));

route('inactief', "controller/dummy.php", false);

//niets gevonden dan...
http_response_code(404);
require "view/404.view.php";
die();

Door in de route als derde parameter een boolean mee te geven kan je een route ook tijdelijk inactief maken.

route('inactief',"controller/dummy.php",false);