闲话不多说,TP5(5.0.20) 在配置多入口文件的时候你是否遇到过一下的问题呢?

开发设计的需求吧网站拆分为前台、后台、API 3 个模块,对应的也需要3个入口文件,后台和API入口文件是用PATH_INFO 模式访问(关闭路由)。

在配置后台入口文件的时候,直接从前台入口文件拷贝了主要代码如下

<?php
// [ 后台应用入口文件 ]
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
//定义自定义的配置目录
define('CONF_PATH', __DIR__ . '/../config/'); //开启调试
define('APP_DEBUG', true);
//关闭opcache缓存模块
ini_set('opcache.revalidate_freq',); //绑定admin模块
define('BIND_MODULE','admin/Index'); // 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php'; //关闭admin模块下的路由,必须写在框架引导文件之后
\think\App::route(false);

测试一下是否成功,(づ ̄3 ̄)づ╭❤~biubiu! 报错...

我的个×,什么鬼,我绑定了admin 模块了啊,报个index模块不存在,什么意思,牛头不对马嘴啊

经过逐步的排查分析,发现是config 配置文件中配置中开启了路由,但是 admin 入口文件中关闭路由方式不对(查看了官方文档和搜了下其他人所说的,完全没用)。

在5.0系列的入口文件中 加载框架引导文件只有一句代码:

require __DIR__ . '/../thinkphp/start.php';

问题就出在这  !!!!

要想关闭路由需要把上面的加载代码改为

require __DIR__ . '/../thinkphp/base.php';// 加载框架基础文件

// 需要执行的操作
\think\App::route(false);//关闭路由,必须写在基础框架之后,用于执行之前 \think\App::run()->send();// 执行应用

这样才能使自定义的配置文件生效。

还发现个问题是在入口文件中定义的一些设置其实根本没生效,如define('APP_DEBUG', true');这个不论改成大小写还是放在入口文件中任意位置,试过之后根本不起作用,必须在配置文件中去设置才能生效。

入口文件中可动态配置常量,但实际有些是不会生效的,需要测试后才能知道(不要一味的照搬)

如果想要模块有不同的设置的话,在 应用目录=》模块目录=》config.php 中进行设置,会覆盖最上层的应用设置的;也可以在自定义的 配置目录config =》模块目录(如admin)=》config.php 中设置。

扩展配置在extra文件夹下,文件名就是配置名称,配置的选项是该扩展配置的二级配置。每个模块都可以设置独立的扩展配置。

如在在自动公共配置目录的extra目录下新建一个myconfig.php文件,写入配置项

<?php
return [
//是否允许用户注册 [off|on]
'user_enable_register' => 'on',
//是否允许用户登录 [off|on]
'user_enable_login' => 'on',
//前台访问key值
'index_key' => 'indexkey',
//后台访问key值
'admin_key' => 'dminkey',
//api文档key值
'api_key' => 'apikey',
];

生成的二级配置如下

'myconfig' =>
'user_enable_register' => string 'on'
'user_enable_login' => string 'on'
'index_key' => string 'indexkey'
'admin_key' => string 'adminkey'
'api_key' => string 'apikey'

配置优先级,优先级高的设置相同配置会覆盖优先级低的,自定义配置目录下的要优先于应用目录下的配置文件

即:

  • config/模块/extra/配置文件   优先级高于 application/模块/extra/配置文件
  • config/模块/config.php 优先级高于 application/模块/config.php
  • config/config.php 优先级高于 application/config.php  

提示:在实际开发中,入口文件设置和配置文件设置要多注意测试,有些问题,需要用不同的方式去测试后才知道是否正确。

最新文章

  1. Redis-3.2.6 配置文件中文翻译
  2. 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
  3. Uva1624 Knots
  4. struts2 校验demo
  5. cvLoadImage函数解析 cvLoadImageM()函数
  6. 抛弃vboot不格盘用grub4dos+firadisk安装Ghost版XP到VHD,轻松RAMOS!
  7. WCF - Versus Web Service
  8. 一个很cool的C#的高性能数学库
  9. linux下解压压缩rar文件
  10. react-native使用react-art制作SVG动画
  11. HoloLens开发与性能优化实践
  12. FreeSWITCH 内线拨号 总是使用 dialplan/public 拨号计划,而对 dialplan/default 视而不见
  13. 【webstorm使用手册】如何让webstorm支持nextcss基础语法?
  14. 查看文件内容 cat , tac
  15. NOIP国王游戏
  16. jQuery插件初级练习1答案
  17. Html-文档类型(DTD)和DOCTYPE
  18. VB6 获取和设置默认打印机
  19. 【Spring】SpringMVC之详解AOP
  20. android中SimpleCursorAdapter _id错误的问题

热门文章

  1. 如何搭建openvpn
  2. 10-[协程] greenlet模块、 gevent模块
  3. CF 1114 D. Flood Fill
  4. 4008: [HNOI2015]亚瑟王
  5. [SHOI2008]仙人掌图
  6. error: this &#39;if&#39; clause does not guard... [-Werror=misleading-indentation]
  7. org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: Invalid Addresses
  8. SourceTree跳过注册安装使用
  9. 戴尔win10重新安装win7系统
  10. linux下实现压测-html报表生成-控制台参数优化【jmeter】