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

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

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

  1. <?php
  2. // [ 后台应用入口文件 ]
  3. // 定义应用目录
  4. define('APP_PATH', __DIR__ . '/../application/');
  5. //定义自定义的配置目录
  6. define('CONF_PATH', __DIR__ . '/../config/');
  7.  
  8. //开启调试
  9. define('APP_DEBUG', true);
  10. //关闭opcache缓存模块
  11. ini_set('opcache.revalidate_freq',);
  12.  
  13. //绑定admin模块
  14. define('BIND_MODULE','admin/Index');
  15.  
  16. // 加载框架引导文件
  17. require __DIR__ . '/../thinkphp/start.php';
  18.  
  19. //关闭admin模块下的路由,必须写在框架引导文件之后
  20. \think\App::route(false);

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

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

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

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

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

问题就出在这  !!!!

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

  1. require __DIR__ . '/../thinkphp/base.php';// 加载框架基础文件
  2.  
  3. // 需要执行的操作
  4. \think\App::route(false);//关闭路由,必须写在基础框架之后,用于执行之前
  5.  
  6. \think\App::run()->send();// 执行应用

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

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

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

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

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

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

  1. <?php
  2. return [
  3. //是否允许用户注册 [off|on]
  4. 'user_enable_register' => 'on',
  5. //是否允许用户登录 [off|on]
  6. 'user_enable_login' => 'on',
  7. //前台访问key值
  8. 'index_key' => 'indexkey',
  9. //后台访问key值
  10. 'admin_key' => 'dminkey',
  11. //api文档key值
  12. 'api_key' => 'apikey',
  13. ];

生成的二级配置如下

  1. 'myconfig' =>
  2. 'user_enable_register' => string 'on'
  3. 'user_enable_login' => string 'on'
  4. 'index_key' => string 'indexkey'
  5. 'admin_key' => string 'adminkey'
  6. 'api_key' => string 'apikey'

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

即:

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

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

TP5 多入口文件配置的坑的更多相关文章

  1. flutter 入口文件配置路由+加载页面

    入口文件配置路由 1.路由信息 -- 加载页面 ,通常用于显示新的内容或者广告,加载完成之后进入主页面 -- 主页面 /app 2.配置页面  main.dart main.dart // main ...

  2. webpack4 单入口文件配置 多入口文件配置 以及常用的配置

    单入口文件配置 webpack.config.js const path = require('path'); const HtmlWebpackPlugin = require('html-webp ...

  3. tp5更改入口文件到根目录的方法分享

    tp5把入口文件放到了public目录中,对于服务器或者vps来说没啥,因为可以指定目录,但是对于虚拟主机就不行了,我们必须吧index.php这入口文件放到根目录,那么我么需要改一下相对的引入文件的 ...

  4. nginx下TP5 隐藏入口文件+支持pathinfo模式+配置多项目根目录

    首先说下项目目录情况  跟目录/usr/share/nginx/html/(别说怎么这么深  0.0) html文件夹下面两个目录 pssh  pssh_shop 两个tp5项目分别对应两个二级域名 ...

  5. Ubuntu下TP5隐藏入口文件

    部分内容是复制其他网友的博文,由于过了一段时间,找不到原文地址,再次表示感谢.以下是自己整理的,目的只是以后方便查阅 1.ubuntu或linux下找不到apache服务器配置文件httpd.conf ...

  6. Think_php入口文件配置

    think_php的入口模式有两种方式 1,一个入口文件对应一个项目应用 2,一个入口文件对应所有项目应用 默认情况,入口文件只需要require thinkphp文件夹就可以.比如thinkphp文 ...

  7. Ubuntu Server 14.04 & Apache2.4 虚拟主机、模块重写、隐藏入口文件配置

    环境: Ubuntu Server 14.04 , Apache2.4 一.Apache2.4 虚拟主机配置 01. 新建一份配置文件 在apache2.4中,虚拟主机的目录是通过/etc/apach ...

  8. tp5.1入口文件隐藏

    修改.htaccess文件 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On Re ...

  9. tp5隐藏入口文件(基于nginx)

    location / {             try_files $uri $uri/ /index.php?$query_string; #这项配置解决访问根目录以外路径报404的错误      ...

随机推荐

  1. 如何实现PyQt5与QML响应彼此发送的信号?

    对于PyQt5+QML+Python3混合编程,如何实现PyQt5与QML响应彼此发送的信号,这是一个棘手的问题. 大抵有如下五种方式: (要运行下面五个例子,千万不能在eric6中运行,会报错.错误 ...

  2. CF 258 D. Little Elephant and Broken Sorting

    D. Little Elephant and Broken Sorting 链接 题意: 长度为n的序列,m次操作,每次交换两个位置,每次操作的概率为$\frac{1}{2}$,求m此操作后逆序对的期 ...

  3. spring 各个版本的源码、jar包和源码jar包下载地址

    spring各个版本的源码jar包.文档jar包和spring的jar包 http://maven.springframework.org/release/org/springframework/sp ...

  4. c# table 怎么在前台循环展示 ViewBag

    后台 public ActionResult DoctorEvaluation()//前台页面 { HE_Department HE_dt = new HE_Department(); DataTab ...

  5. Navigation - How to define the structure of the navigation tree via the NavigationItemAttribute

    In the meantime, you should use the Model Editor to create such a navigation structure. There are se ...

  6. 【总结】浅谈ref与out

    ref——仅仅是一个地址 (1)当一个方法或函数在使用ref作为参数时,在方法中或函数中对ref参数所做的更改都将反映在该变量中. (2)如果要使用ref参数,则必须将参数作为ref显示传递到方法中. ...

  7. [WPF]解决模板中ContextMenu绑定CommandParameter的问题

    直接上代码,首先是一个ContextMenu的模板: <ContextMenu x:Key="Menu" BorderThickness="0.3" Fo ...

  8. Window10家庭版启动hyper-v虚拟机组件

    在安装docker的时候发现如果直接使用docker for windows,对系统的要求是window10专业版或企业版,家庭版本身没有hyper-v,不能支持 虚拟化.但是后来我在搜索过程中发现, ...

  9. Python科学测量与计算库Pymeasure: 控制你的仪器进行自动测试和科学计算

    Python这种脚本语言因其语法简单,工具包丰富成熟,使用起来非常方便.在很多领域被广泛使用,今天介绍的是python在仪器控制应用领域,python在仪器控制领域相关的书籍可以参考<真实世界的 ...

  10. day23 正则,re模块

    一. 简谈正则表达式 元字符 . 除了换行符外任意字符. \w 数字.字母.下划线 \s 空白符 \b 单词的末尾 \d 数字 \n 匹配换行符 \t 匹配制表符 \W 除了数字. 字母 下划线 \D ...