• 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',0);
    
    //绑定admin模块
    define('BIND_MODULE','admin/Index');
    
    // 加载框架引导文件
    require __DIR__ . '/../thinkphp/start.php';
    
    //关闭admin模块下的路由,必须写在框架引导文件之后
    	hinkApp::route(false);

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

    我的个×,什么鬼,我绑定了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  

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

  • 相关阅读:
    一次完整的HTTP事务的过程
    移动端事件
    canvas 在视频中的用法
    理解Vue
    改变console.log的输出样式
    百度下拉搜索案例
    Vue总结
    字符串、正则
    .Net Mvc框架知识点
    Lowest Common Ancestor of a Binary Tree -- LeetCode
  • 原文地址:https://www.cnblogs.com/zwesy/p/9399179.html
Copyright © 2020-2023  润新知