Thinkphp5 常量设置问题
楼主是之前使用了thinkphp3.2快两年了,很早就听说过thinkphp的版本已经到达5了。
不过鉴于早期的版本尚未完善,并没有立即开始学习。最近做一个项目,尝试一下新的知识。
但是在使用的时候,的确不是很方便。文档方面是一个硬伤,不过是开源的,没有什么好吐槽的。
在尝试自定义一些常量的时候,遇到了一些问题。
像3.2版本的,直接就在整个项目下的index.php下面用define去定义一些常量,然后就可以在代码中直接使用。
这次走了旧路,直接在整个项目下找到一个类似3.2版本index定义的think文件。代码如下:
// 定义项目路径
define('APP_PATH', __DIR__ . '/application/'); // 加载框架引导文件
require __DIR__.'/thinkphp/console.php';
在此处,我需要定义上传的常量:
故修改代码为:
// 定义项目路径
define('APP_PATH', __DIR__ . '/application/');
// 定义上传路径
define('UPLOAD_PATH', __DIR__.'/public/uploads/');
// 加载框架引导文件
require __DIR__.'/thinkphp/console.php';
但是在寻找的时候却出现错误:
Use of undefined constant UPLOAD_PATH - assumed 'UPLOAD_PATH'
奇怪的就是你可以输入APP_PATH,并且按住control+鼠标左击,其实是能到达你定义的这个常量的。
我看了一下官方的文档,并没有涉及这方面的讲解,至于收费文档里面有没有就不清出了。毕竟也没购买~~
然后我就看是追踪一下访问的路径,发现前面是访问了public下的,明显,入口文件不是think。
于是我在public目录下找到了正确的入口文件indexphp:
// [ 应用入口文件 ] // 定义应用目录
define('APP_PATH', __DIR__ . '/../application/'); // 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
和think.php有相同的地方。但是上面明显标有应用入口文件说明。
然后思路就清晰了!此处提供三种方法定义:
方法一:
在应用入口文件定义常量
在public/indexphp处将UPLOAD_PATH定义。定义后文件代码为:
// [ 应用入口文件 ] // 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 定义上传目录
define('UPLOAD_PATH', __DIR__.'/public/uploads'); // 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
则可访问UPLOAD_PATH常量(dump(UPLOAD_PATH))。
方法二:
定义一个自己的常量定义文件,例如:
在extend目录下建立const.php文件,在里面输入:
//自定义常量
//上传目录
define('UPLOAD_PATH', __DIR__.'/../public/uploads');
然后再在入口文件内,引入该文件:
// [ 应用入口文件 ] // 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
//方法二:
//引入自定义常量文件
require __DIR__ . '/../extend'. '/const.php';
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
即可访问到该常量的定义。
方法三:
跟踪一下APP_PATH的定义:

发现在三处有定义(工具下的项目有点多~~当前为:documentary):
分别是:public/index.php
thinkphp/base.php
tnink
此时,可以在base.php下找到定义常来的代码。并插入UPLOAD_PATH的定义,即可访问。
不过这种方法并不提倡,因为修改了核心的代码。更新之类的话,自找麻烦了。
Thinkphp5 常量设置问题的更多相关文章
- java常量设置的方式
我们在写java程序的时候,常常有常量设置,如: public interface Const { //性别的常量 public interface Sex{ public final int 男=1 ...
- laravel5.8笔记六:公共函数和常量设置
公共函数 创建bootstrap/common.php <?php // 发送短信 function sendSMS($mobile){ } // 发送邮件 function sendMail( ...
- thinkphp将APP_DEBUG常量设置为false后报错的问题
ThinkPHP 将 APP_DEBUG 常量设置为 false 后出现了下面的问题: Parse error: syntax error, unexpected T_STRING in \www\R ...
- THINKPHP5获取设置缓存的例子
在THINKPHP5中 缓存的配置放在了config.php文件中 代码如下 如何设置缓存? 可以使用静态方法 Cache::set('key',$value,3600);//存储缓存 Cache:: ...
- java 常量 因为常量不依赖对象 所以一般都会将常量设置为 类属性
- WAMP采用别名时ThinkPHP5项目设置方法
打开public目录下的.htaccess文件,并在其中添加 RewriteBase /xxx<IfModule mod_rewrite.c> Options +FollowSymlink ...
- Java 静态变量,常量和方法
static 关键字 例如:在球类中使用PI这个常量,可能除了本类需要这个常量之外,在另外一个圆类中也需要使用这个常量.这时没有必要 在两个类中同时创建PI这个常量,因为这样系统会将这两个不在同一个类 ...
- php大力力 [010节]PHP常量
2015-08-23 php大力力010. PHP常量 php大力力 [010节]PHP常量 设置 PHP 常量 如需设置常量,请使用 define() 函数 - 它使用三个参数: 首个参数定义常量的 ...
- 【Struts2学习笔记-3】常量配置
Struts2常量 配置Struts2常量值有3个地方,1)在struts.properties文件中配置常量:2)在web.xml文件中配置FileterDispatcher指定初始化参数来配置常量 ...
随机推荐
- js时间戳和日期字符串相互转换
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- mysql更新某个字符串字段的部分内容
如果现在需要Mysql更新字段重部分数据,而不是全部数据,应该采用何种方法呢?下面介绍了两种情况下Mysql更新字段中部分数据的方法,供您参考. Mysql更新字段中部分数据第一种情况: update ...
- jdk版本查看,以及java -version 和JAVA_HOME不一致问题
一.jdk版本查看及位数查看 在cmd进入命令行窗口,输入java -version 可以查看安装的jdk版本,如图: 当有64-bit时代表是64位jdk,如果没有则默认是32位的. 二.java ...
- C#中回车出发事件(+收藏)
本文给大家介绍如何在c# winform中实现回车事件和回车键触发按钮的完美写法 我们常常要在c# winform中实现回车(enter)提交功能,这样比手动按按钮触发更快. 要完成回车按按钮功能,只 ...
- System.Object简介
Object中的公共方法解释: 公共方法: Equals: public class Object { public virtual Boolean Equals(Object obj) { //如果 ...
- Python系列之lambda、函数、序列化
lambda 在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python la ...
- 2—sat
模型的解决方法看论文<利用对称性解决2-SAT问题> HDU1814 :难度1.5 HDU1824: 难度 2 HDU1815: 难度3 HDU1816: 对于每两个人,二选一HDU181 ...
- 【框架学习与探究之消息队列--EasyNetQ(2)】
声明 本文欢迎转载,系博主原创,本文原始链接地址:http://www.cnblogs.com/DjlNet/p/7654902.html 前言 此文章,是承接上篇:[框架学习与探究之消息队列--Ea ...
- 易语言关于使用CURL,网页_访问,网页_访问S,网页_访问_对象,鱼刺(winHttpW)发送Get性能测试
易语言关于使用 CURL,网页_访问,网页_访问S,网页_访问_对象,鱼刺(winHttpW)发送Get性能测试 测试模块情况: |-精易模块5.8 |-鱼刺类Http |-libCURL +++ ...
- C++的socket编程学习
前言 不得不承认作为一个前端开发,仍有一个后台开发的梦.从socket通信开始学习,在工作之余补充学习点相关知识,记录下学习的过程. 服务端 服务器代码如下,在设置listen之后,通过accept获 ...