Maison  >  Article  >  cadre php  >  Comment configurer thinkphp pour configurer plusieurs applications et plusieurs configurations

Comment configurer thinkphp pour configurer plusieurs applications et plusieurs configurations

尚
avant
2020-05-07 09:25:252692parcourir

Comment configurer thinkphp pour configurer plusieurs applications et plusieurs configurations

Multi-module

Dans ThinkPHP 3.2.3, le répertoire d'application par défaut est ./Application, et le module par défaut ci-dessous est le répertoire Accueil module , si vous devez ajouter un module Admin pour l'application en arrière-plan à ce moment, ajoutez le fichier d'entrée par défaut ./index.php :

// 绑定Admin模块到当前入口文件
define('BIND_MODULE','Admin');

Exécutez http://serverNmae/index.php à ce moment, et il sera dedans. Un module Admin est généré dans le répertoire /Application. Cependant, lorsque vous accédez à http://serverName/index.php à ce moment-là, vous accédez en fait au module Admin nouvellement ajouté, même si vous ajoutez

//设置默认模块
'DEFAULT_MODULE'    =>  'Home'

dans ./Application/Common/Conf/config.php. , cela ne fonctionnera pas correctement. Localisez le module Accueil.

En fait, la signification réelle de la définition de BIND_MODULE dans le fichier d'entrée mentionné dans le manuel est de définir le module par défaut. Voir : ./ThinkPHP/Library/Think/Dispatcher.calss.php Ce fichier définit la classe Dispatcher intégrée de ThinkPHP, qui est utilisée pour effectuer l'analyse, le routage et la planification des URL (voir la section « Processus système » dans le manuel). où Ligne :140

// 获取模块名称
define('MODULE_NAME', defined('BIND_MODULE')? BIND_MODULE : self::getModule($varModule));

Dans la répartition de la méthode statique, pour obtenir le nom du module, demandez d'abord si BIND_MODULE est défini dans le fichier d'entrée. S'il existe une définition, la valeur du MODULE_NAME défini est la valeur de. le BIND_MODULE défini. Sinon, appelez cette méthode privée statique getModule dans la classe pour obtenir le nom réel du module :

/**
     * 获得实际的模块名称
     */
    static private function getModule($var) {
        $module   = (!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_MODULE'));
        unset($_GET[$var]);
        if($maps = C('URL_MODULE_MAP')) {
            if(isset($maps[strtolower($module)])) {
                // 记录当前别名
                define('MODULE_ALIAS',strtolower($module));
                // 获取实际的模块名
                return   ucfirst($maps[MODULE_ALIAS]);
            }elseif(array_search(strtolower($module),$maps)){
                // 禁止访问原始模块
                return   '';
            }
        }
        return strip_tags(ucfirst(strtolower($module)));
    }

Dans cette méthode, si l'URL ne contient pas le VAR_MODULE redéfini par le fichier de configuration (la valeur par défaut est m , dans ./ThinkPHP/Conf/convention.php), recherchez la valeur de DEFAULT_MODULE définie dans le fichier de configuration.

Grâce à l'analyse ci-dessus, on peut conclure que BIND_MODULE définit réellement le module par défaut. S'il y a plusieurs modules dans le projet, ne le configurez pas comme ça.

Si vous commentez BIND_MODULE dans le fichier d'entrée par défaut ./index.php (c'est-à-dire utilisez la configuration du fichier d'entrée par défaut), vous pouvez accéder au module Admin en accédant directement à http://serverName/admin, car dans ce fichier d'entrée, le répertoire d'application ./Application est défini, donc l'accès à http://serverName/admin accède en fait à la méthode d'index dans ./Application/Admin/Controller/IndexController.class.php.

ThinkPHP 3.2.3 peut configurer plusieurs modules de cette manière sans avoir à le définir dans le fichier d'entrée et le fichier de configuration. C'est également le mode de regroupement officiellement recommandé par ThinkPHP.

Une autre configuration est une conception à entrées multiples, c'est-à-dire créer admin.php au même niveau que le fichier d'entrée par défaut index.php, et ajouter index.php :

// 绑定Home模块到当前入口文件
define('BIND_MODULE','Home');

dans admin.php Utilisez la même configuration que index.php, à l'exception de la définition de BIND_MODULE, changez la définition de BIND_MODULE en :

// 绑定Admin模块到当前入口文件
define('BIND_MODULE','Admin');

Ajoutez ensuite :

//设置默认模块
'DEFAULT_MODULE'    =>  'Home',

À ce stade, vous pouvez accéder au module Accueil en accédant à http://serverName/index.php, et vous pouvez accéder au module Admin en accédant à http://servername/admin.php, mais vous ne pouvez pas accéder à http://serverName/admin , car index.php ne peut accéder qu'au module Home pour le moment.

Applications multiples

Généralement, ThinkPHP 3.2.3 n'a pas besoin d'utiliser le mode multi-application, car dans la plupart des cas, cela peut être réalisé via multi-modulaire et multi- conception d'entrée Résoudre les besoins d'expansion des applications.

Si vous devez utiliser le mode multi-application, comme par exemple créer l'application Application_API, vous pouvez créer le répertoire Applicaiton_API sous le même répertoire de niveau que ./Application, et ajouter le fichier d'entrée ./api.php à pointez le répertoire de l'application vers ./Application_API :

// 定义应用目录
define('APP_PATH','./Application_API/');

Notez que les applications nouvellement ajoutées doivent initialement avoir un module Home même si

//设置默认模块
'DEFAULT_MODULE'    =>  'Api',

est défini dans ./Application_API/Common/Conf/config. .php, il peut être nécessaire d'avoir un module Home au départ, sinon une erreur sera rapportée : Impossible de charger le contrôleur Index.

Tutoriel recommandé : "

TP5"

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