TP5 多入口文件配置的坑

摘要:
毫无疑问,在TP5中配置多个条目文件时,您是否遇到过以下问题?我们还发现,条目文件中定义的一些设置根本没有生效,例如define;无论是更改为大写或小写,还是放置在条目文件中的任何位置,尝试后都无法工作。它必须在配置文件中设置才能生效。扩展配置位于外部文件夹中。文件名是配置名称。配置选项是扩展配置的辅助配置。

闲话不多说,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',0);

//绑定admin模块
define('BIND_MODULE','admin/Index');

// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

//关闭admin模块下的路由,必须写在框架引导文件之后
	hinkApp::route(false);

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

TP5 多入口文件配置的坑第1张

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

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

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

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

问题就出在这  !!!!

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

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

// 需要执行的操作
	hinkApp::route(false);//关闭路由,必须写在基础框架之后,用于执行之前

	hinkApp::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  

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

免责声明:文章转载自《TP5 多入口文件配置的坑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mysql学习总结(36)——Mysql查询优化学习使用Bing Maps Silverlight Control(五):离线使用和自定义地图模式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Equinox OSGi系列之 创建自己的OSGi应用项目

1、摘要 前述文档我向大家展示了Equinox OSGi环境及其搭建配置。从本文开始,我们将详细讨论Bundle的开发及OSGi应用构建。 2、OSGi相关概念 在正式进入Bundle的设计与开发之前,我们先来熟悉一下OSGi框架中的一些概念。用户在设计Bundle时必须要深入理解这些实体概念。 实体概念 实体概念说明 Bundle - 安装到OS...

快速掌握Shell编程

(一)Shell编程概述 1.1 shell简述 Shell编程和JavaScript非常相似,Shell和JavaScript都是弱类型语言,同时也都是解释型语言。解释型语言需要解释器,JavaScript的解释器是浏览器,Shell脚本的解释器时bash,是一个shell、一个命令行用户接口。 1.2 bash简述 bash在执行或者解释脚本的时候,此...

MANIFEST.MF文件详解

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录, 这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内 容,先来看struts.jar中包含的MANIFEST.MF文件内容: Manifest-Version: 1.0Created-By...

SpringCloud入门之常用的配置文件 application.yml和 bootstrap.yml区别

SpringBoot默认支持properties和YAML两种格式的配置文件。前者格式简单,但是只支持键值对。如果需要表达列表,最好使用YAML格式。SpringBoot支持自动加载约定名称的配置文件,例如application.yml。如果是自定义名称的配置文件,就要另找方法了。可惜的是,不像前者有@PropertySource这样方便的加载方式,后者的...

(转)每天一个linux命令(8):cp 命令,复制文件和文件夹

场景:自动部署脚本中为了部署方便,将配置文件放在服务器端,每次部署都使用服务端的配置文件覆盖上传上去的配置文件。 cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一。 一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数。 但是如果是在shell脚本中执行cp时,没有-i参...

cscope的使用

Cscope 是一个非常灵巧的工具,但是它仍然需要使用您最顺手的编辑器去发挥它强大的功能。 幸运的是,Vim 已经包含了 Cscope 支持。 这篇指导主要介绍了 Vim 内在的 Cscope 支持,以及如何更好的通过已配置的 Map(a set of maps)实现搜索功能。 下面假设您有基本的使用类 vi 编辑器的技能 - 不过并不需要 Vim 更特殊...