Thinkphp5 常量设置问题
Posted gxkx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thinkphp5 常量设置问题相关的知识,希望对你有一定的参考价值。
楼主是之前使用了thinkphp3.2快两年了,很早就听说过thinkphp的版本已经到达5了。
不过鉴于早期的版本尚未完善,并没有立即开始学*。最*做一个项目,尝试一下新的知识。
但是在使用的时候,的确不是很方便。文档方面是一个硬伤,不过是开源的,没有什么好吐槽的。
在尝试自定义一些常量的时候,遇到了一些问题。
像3.2版本的,直接就在整个项目下的index.php下面用define去定义一些常量,然后就可以在代码中直接使用。
这次走了旧路,直接在整个项目下找到一个类似3.2版本index定义的think文件。代码如下:
1 // 定义项目路径 2 define(\'APP_PATH\', __DIR__ . \'/application/\'); 3 4 // 加载框架引导文件 5 require __DIR__.\'/thinkphp/console.php\';
在此处,我需要定义上传的常量:
故修改代码为:
1 // 定义项目路径 2 define(\'APP_PATH\', __DIR__ . \'/application/\'); 3 // 定义上传路径 4 define(\'UPLOAD_PATH\', __DIR__.\'/public/uploads/\'); 5 // 加载框架引导文件 6 require __DIR__.\'/thinkphp/console.php\';
但是在寻找的时候却出现错误:
Use of undefined constant UPLOAD_PATH - assumed \'UPLOAD_PATH\'
奇怪的就是你可以输入APP_PATH,并且按住control+鼠标左击,其实是能到达你定义的这个常量的。
我看了一下官方的文档,并没有涉及这方面的讲解,至于收费文档里面有没有就不清出了。毕竟也没购买~~
然后我就看是追踪一下访问的路径,发现前面是访问了public下的,明显,入口文件不是think。
于是我在public目录下找到了正确的入口文件indexphp:
1 // [ 应用入口文件 ] 2 3 // 定义应用目录 4 define(\'APP_PATH\', __DIR__ . \'/../application/\'); 5 6 // 加载框架引导文件 7 require __DIR__ . \'/../thinkphp/start.php\';
和think.php有相同的地方。但是上面明显标有应用入口文件说明。
然后思路就清晰了!此处提供三种方法定义:
方法一:
在应用入口文件定义常量
在public/indexphp处将UPLOAD_PATH定义。定义后文件代码为:
1 // [ 应用入口文件 ] 2 3 // 定义应用目录 4 define(\'APP_PATH\', __DIR__ . \'/../application/\'); 5 // 定义上传目录 6 define(\'UPLOAD_PATH\', __DIR__.\'/public/uploads\'); 7 8 // 加载框架引导文件 9 require __DIR__ . \'/../thinkphp/start.php\';
则可访问UPLOAD_PATH常量(dump(UPLOAD_PATH))。
方法二:
定义一个自己的常量定义文件,例如:
在extend目录下建立const.php文件,在里面输入:
1 //自定义常量 2 //上传目录 3 define(\'UPLOAD_PATH\', __DIR__.\'/../public/uploads\');
然后再在入口文件内,引入该文件:
1 // [ 应用入口文件 ] 2 3 // 定义应用目录 4 define(\'APP_PATH\', __DIR__ . \'/../application/\'); 5 //方法二: 6 //引入自定义常量文件 7 require __DIR__ . \'/../extend\'. \'/const.php\'; 8 // 加载框架引导文件 9 require __DIR__ . \'/../thinkphp/start.php\';
即可访问到该常量的定义。
方法三:
跟踪一下APP_PATH的定义:
发现在三处有定义(工具下的项目有点多~~当前为:documentary):
分别是:public/index.php
thinkphp/base.php
tnink
此时,可以在base.php下找到定义常来的代码。并插入UPLOAD_PATH的定义,即可访问。
不过这种方法并不提倡,因为修改了核心的代码。更新之类的话,自找麻烦了。
以上是关于Thinkphp5 常量设置问题的主要内容,如果未能解决你的问题,请参考以下文章
ThinkPHP5.0对MVC的理解,引入控制器,静态页,静态常量!
thinkphp 5.0 怎么设置模版的全局变量【常量也行】
14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段