TP5 多入口文件配置的坑
闲话不多说,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
提示:在实际开发中,入口文件设置和配置文件设置要多注意测试,有些问题,需要用不同的方式去测试后才知道是否正确。
最新文章
- Redis-3.2.6 配置文件中文翻译
- 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
- Uva1624 Knots
- struts2 校验demo
- cvLoadImage函数解析 cvLoadImageM()函数
- 抛弃vboot不格盘用grub4dos+firadisk安装Ghost版XP到VHD,轻松RAMOS!
- WCF - Versus Web Service
- 一个很cool的C#的高性能数学库
- linux下解压压缩rar文件
- react-native使用react-art制作SVG动画
- HoloLens开发与性能优化实践
- FreeSWITCH 内线拨号 总是使用 dialplan/public 拨号计划,而对 dialplan/default 视而不见
- 【webstorm使用手册】如何让webstorm支持nextcss基础语法?
- 查看文件内容 cat , tac
- NOIP国王游戏
- jQuery插件初级练习1答案
- Html-文档类型(DTD)和DOCTYPE
- VB6 获取和设置默认打印机
- 【Spring】SpringMVC之详解AOP
- android中SimpleCursorAdapter _id错误的问题
热门文章
- 如何搭建openvpn
- 10-[协程] greenlet模块、 gevent模块
- CF 1114 D. Flood Fill
- 4008: [HNOI2015]亚瑟王
- [SHOI2008]仙人掌图
- error: this &#39;if&#39; clause does not guard... [-Werror=misleading-indentation]
- org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: Invalid Addresses
- SourceTree跳过注册安装使用
- 戴尔win10重新安装win7系统
- linux下实现压测-html报表生成-控制台参数优化【jmeter】