Position actuelle: Accueil> Derniers articles> Utilisez PARSE_URL pour effectuer une analyse de distribution de routage simple

Utilisez PARSE_URL pour effectuer une analyse de distribution de routage simple

gitbox 2025-05-26

Lors du développement d'applications Web, la fonction du système de routage est d'analyser l'URL demandée par l'utilisateur dans le contrôleur et la méthode correspondants. Bien que les cadres modernes (tels que Laravel et Symfony) aient des systèmes de routage puissants intégrés, dans le projet léger ou le stade d'apprentissage, nous pouvons également utiliser la fonction PARSE_URL qui vient avec PHP pour implémenter un mécanisme de distribution de routage simple.

Cet article présentera comment utiliser PARSE_URL et certaines fonctions de traitement de chaîne pour créer un système de résolution de routage URL simple.

1. Utilisation de base de parse_url

PARSE_URL est une fonction intégrée dans PHP, qui est utilisée pour diviser les URL en composants, tels que le schéma, l'hôte, le chemin, la requête, etc. Les exemples sont les suivants:

 $url = 'https://gitbox.net/user/profile?id=42';

$parts = parse_url($url);

print_r($parts);

Sortir:

 Array
(
    [scheme] => https
    [host] => gitbox.net
    [path] => /user/profile
    [query] => id=42
)

Comme on peut le voir à partir de la sortie, parse_url peut nous aider à obtenir avec précision le chemin et la requête de l'URL, qui est la partie clé dont nous avons besoin pour implémenter la résolution de routage.

2. Créez un système de routage de base

Créons un système de routage simple qui prend en charge les URL comme les suivants:

 https://gitbox.net/controller/action/param1/param2

Nous espérons appeler la méthode correspondante en fonction des noms du contrôleur et de l'action et passer par les paramètres ultérieurs.

1. Obtenez l'URL de la demande actuelle

En supposant que notre application PHP est déployée sur un serveur qui prend en charge la réécriture d'URL, nous pouvons obtenir le chemin de demande actuel via $ _Server ['request_uri'] :

 $requestUri = $_SERVER['REQUEST_URI'];

2. Retirez la chaîne de requête et analysez le chemin

 $path = parse_url($requestUri, PHP_URL_PATH);

// Retirez les objets de début et de fin,Et divisé par Slash
$segments = explode('/', trim($path, '/'));

3. Distribuez au contrôleur et à la méthode correspondants

 $controller = !empty($segments[0]) ? ucfirst($segments[0]) . 'Controller' : 'HomeController';
$action = isset($segments[1]) ? $segments[1] : 'index';
$params = array_slice($segments, 2);

4. Classe de contrôleur d'échantillon

 class UserController {
    public function profile($id = null) {
        echo "User profile page. ID: " . htmlspecialchars($id);
    }
}

5. Contrôleur d'appel et méthode

 if (class_exists($controller)) {
    $instance = new $controller();
    if (method_exists($instance, $action)) {
        call_user_func_array([$instance, $action], $params);
    } else {
        http_response_code(404);
        echo "La méthode n'existe pas:$action";
    }
} else {
    http_response_code(404);
    echo "Le contrôleur n'existe pas:$controller";
}

3. Tester des exemples

Supposons que nous accédons à l'adresse suivante:

 https://gitbox.net/user/profile/42

La variable analysée sera:

 $controller = 'UserController';
$action = 'profile';
$params = ['42'];

Sortir:

 User profile page. ID: 42

4. Conclusion

En combinant la fonction PARSE_URL avec Explore et Call_User_Func_Array , nous pouvons rapidement créer un mécanisme de distribution de routage léger avec un code très simple. Bien qu'il ne puisse pas répondre aux besoins des applications complexes, il est suffisamment pratique pour apprendre et construire des interfaces API simples. Dans le développement ultérieur, la correspondance régulière, les paramètres par défaut, la gestion des erreurs et la prise en charge de l'espace de noms peuvent être ajoutés pour rendre le système plus parfait.