Maison  >  Article  >  développement back-end  >  PHP implémente simplement la fonction de routage Route

PHP implémente simplement la fonction de routage Route

Guanhui
Guanhuiavant
2020-04-30 09:41:0912645parcourir

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;;
    }
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer