Maison >développement back-end >tutoriel php >Création d'un meilleur routeur : gestion des entrées HIDDEN et de la demande DELETE
Il y a quelques jours, j'ai appris à construire un routeur de base qui mappe les URL aux contrôleurs. Maintenant, je dois l'améliorer pour créer un meilleur routeur doté de fonctionnalités avancées. Pour créer un meilleur routeur qui fonctionne avec des entrées cachées, supprimez tout d’abord le fichier router.php de base du projet et créez-en un nouveau. Commençons.
Nous devons créer un meilleur routeur qui mappe efficacement les URL à des contrôleurs ou à des actions spécifiques, permettant à notre application de gérer les demandes et de les acheminer vers les gestionnaires appropriés.
La capacité du meilleur routeur à fonctionner avec des entrées cachées permet une suppression sécurisée des notes en transmettant l'ID de la note au contrôleur sans l'exposer dans l'URL, empêchant ainsi les interférences de l'utilisateur.
<input type="hidden" name="_method" value="DELETE">
Pour créer un fichier routeur, nous devons initialiser la classe Router avec un espace de noms, dans ce cas, Core.
<?php namespace Core; class Router { }
Au fur et à mesure que la classe du routeur est construite, nous devons y définir des fonctions publiques et toutes ont les mêmes paramètres comme get, post, delete, patch et put comme itinéraires essentiels qui aident notre site Web à déterminer quoi faire lorsque quelqu'un visite un certain page. Ces fonctions ont les mêmes paramètres, leur permettant d'effectuer les mêmes actions.
public function get($uri, $controller) { $this->add('GET', $uri, $controller); } public function post($uri, $controller) { $this->add('POST', $uri, $controller); } public function delete($uri, $controller) { $this->add('DELETE', $uri, $controller); } public function patch($uri, $controller) { $this->add('PATCH', $uri, $controller); } public function put($uri, $controller) { $this->add('PUT', $uri, $controller); }
Comme toutes les fonctions publiques ont les mêmes paramètres, nous utilisons la méthode add et lui donnons les mêmes paramètres et uniquement pour l'appeler dans d'autres fonctions. Il est utilisé pour ajouter une nouvelle route à la carte de routage, en prenant trois paramètres : la méthode de requête, le modèle d'URI à correspondre et le fichier de contrôleur pour gérer la requête.
public function add($method, $uri, $controller) { $this->routes[] = [ 'uri' => $uri, 'controller' => $controller, 'method' => $method ]; }
Ici, nous définissons la méthode de route pour déterminer la réponse de notre application à une URL donnée, en la mappant au contrôleur correspondant pour gérer la demande.
public function route($uri, $method) { foreach ($this->routes as $route) { if ($route['uri'] === $uri && $route['method'] === strtoupper($method)) { return require base_path($route['controller']); } } $this->abort(); }
Dans la méthode route, nous utilisons la fonction strtoupper pour convertir une chaîne en majuscules, garantissant ainsi une correspondance insensible à la casse.
strtoupper($method)
Dans le fichier router.php, nous avons défini la méthode d'abandon comme un filet de sécurité, affichant une page d'erreur si notre site Web ne trouve pas le bon itinéraire.
protected function abort($code = 404) { http_response_code($code); require base_path("views/{$code}.php"); die(); }
La dernière chose est de définir la configuration du routage dans le fichier routes.php, en mappant les URL aux actions du contrôleur correspondantes.
$router->get('/', 'controllers/index.php'); $router->get('/about', 'controllers/about.php'); $router->get('/contact', 'controllers/contact.php'); $router->get('/notes', 'controllers/notes/index.php'); $router->get('/note', 'controllers/notes/show.php'); $router->get('/notes/create', 'controllers/notes/create.php');
La méthode get spécifie la méthode de requête (GET), le modèle d'URL et le mappe à un fichier de contrôleur.
En conclusion, nous avons construit un meilleur routeur qui mappe efficacement les URL à des méthodes de contrôleur spécifiques, permettant une approche plus structurée et maintenable du traitement des demandes et améliorant les performances globales et l'évolutivité de notre site Web.
J'espère que vous l'avez bien compris.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!