PHP implémente simplement la fonction de routage Route

Guanhui
Libérer: 2023-04-08 15:22:02
avant
12656 Les gens l'ont consulté

Pour les frameworks PHP indépendants écrits en PHP natif, un seul fichier d'entrée est utilisé pour obtenir l'accès au chemin. Le principal problème que nous rencontrerons à ce stade est : l'inclusion mutuelle des fichiers, suivie de la distribution du routage. Lorsque nous n'utilisons pas le framework PHP mature pour le développement Web, nous constaterons que les deux problèmes ci-dessus nous seront très gênants.

Solution du problème :

1. Inclusion de fichiers

Il existe deux façons d'inclure des fichiers php : require et include La différence entre les deux méthodes. Lorsqu'une erreur se produit lors de l'utilisation de require pour inclure un fichier, une erreur grave sera signalée et le script PHP cessera de s'exécuter ; lorsqu'une erreur se produit lors de l'utilisation de include pour inclure un fichier, il y aura un avertissement, mais le script PHP continuera ; à exécuter. En même temps, les deux méthodes incluent la méthode xxx_once correspondante, ce qui peut éviter le problème de « déclaration de classe ». Par conséquent, lorsque nous utilisons généralement l’inclusion de fichiers, nous essayons d’utiliser include_once pour inclure le fichier.

Dans le même temps, en ce qui concerne le problème du chemin d'accès à l'inclusion de fichiers, nous pouvons utiliser la méthode de définition de variables globales pour trouver d'autres fichiers de chemin en fonction du chemin absolu du fichier d'entrée. Modifier le chemin include_path dans php.ini est bien sûr une autre façon. Utilisez require et include pour inclure le fichier. S'il s'agit d'un chemin relatif, il sera d'abord trouvé selon le paramètre include_path dans le fichier de configuration php.ini.

2. Distribution de routes

La distribution de routes basée sur PHP, en substance, utilise le chemin dans l'URL pour correspondre à la classe de contrôle correspondante, et en même temps appelle les méthodes qu'il contient. Traitement des opérations associées.

Le code sans dire un mot :

<?php
/**
 * Author:helen
 * CreateTime: 2016/07/27 10:26
 * Description:
 */
// 权限控制
include_once &#39;./auth.php&#39;;
// 应用入口文件
date_default_timezone_set("Asia/Shanghai");
header(&#39;Content-type: text/html;charset=utf-8&#39;);
// 项目根路径
define(&#39;BASEPATH&#39;, dirname(__FILE__));
// 调试模式
define(&#39;APP_DEBUG&#39;, True);
// 引入配置文件
include_once BASEPATH . &#39;/config/config.php&#39;;
// 路由控制
$router = include_once BASEPATH . &#39;/config/router.php&#39;;
if ($_SERVER[&#39;HTTP_HOST&#39;] !== &#39;xxx.com&#39;) {
    var_dump(&#39;当前host不被允许&#39;);
} else {
    $request_path = str_replace(&#39;/index.php&#39;, &#39;&#39;, $_SERVER[&#39;PHP_SELF&#39;]);
    $request_query = getCurrentQuery();
    if (array_key_exists($request_path, $router)) {
        $module_file = BASEPATH . $router[$request_path][&#39;file_name&#39;];
        $class_name = $router[$request_path][&#39;class_name&#39;];
        $method_name = $router[$request_path][&#39;method_name&#39;];
        if (file_exists($module_file)) {
            include $module_file;
            $obj_module = new $class_name();
            if (!method_exists($obj_module, $method_name)) {
                die("要调用的方法不存在");
            } else {
                if (is_callable(array($obj_module, $method_name))) {
                    $obj_module->$method_name($request_query, $_POST);
                }
            }
        } else {
            die("定义的模块不存在");
        }
    } else {
        echo &#39;页面不存在&#39;;
    }
}
Copier après la connexion

En utilisant la méthode ci-dessus, la distribution de routage du framework PHP de base peut être réalisée.

Tutoriel recommandé : "Tutoriel PHP"

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!

Étiquettes associées:
php
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal