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:
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);