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 : <🎜 dans le fichier de configuration de l'application ./Application/Common/Conf /config.php >
//设置默认模块 'DEFAULT_MODULE' => 'Home',
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/');
//设置默认模块 'DEFAULT_MODULE' => 'Api',
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!