ThinkPHP学习之——项目入口文件、目录与配置
2.当你发现你什么地方都没错,但是他就提示你~runtime.php下面的第一行.....错误define('SCRIPT_RUNTIME_SPACE','true');false是显示空格和注释,显示具体 报错信息。define('NO_CACHE_RUNTIME',true);不使用缓存
二、ThinkPHP框架中所有配置文件的定义格式均采用返回PHP数组的方式,格式为:
'APP_DEBUG' => true,
'URL_MODEL' => 2,
// 更多的配置参数
// ……
);?>
配置参数不区分大小写(因为无论大小写定义都会转换成小写),所以下面的配置等效:
'app_debug' => true,
'url_model' => 2,
);?>
但是习惯上保持大写定义的原则。
还可以在配置文件中可以使用二维数组来配置更多的信息,例如:
'APP_DEBUG' => true,
'USER_CONFIG' => array(
'USER_AUTH' => true,
'USER_TYPE' => 2,
),
);?>
或者
$array=array(
'USER_AUTH_ON'=>true,
.....
);
return array_merge($config,$array);
系统目前最多支持二维数组的配置级别
具体配置信息可参考《ThinkPHP2.1完全开发手册》8.2配置参考或者查看在线手册http://thinkphp.cn/Manual/222
三、1、读取配置(手册5.1.7)
定义了配置文件之后,可以使用系统提供的C方法来读取已有的配置:
C('参数名称') // 获取已经设置的参数值
例如,C('APP_DEBUG') 可以读取到系统的调试模式的设置值,同样,由于配置参数不区分大小写,因此C('app_debug') 是等效的,但是建议使用大写方式的规范。
如果APP_DEBUG尚未存在设置,则返回NULL。
C方法同样可以用于读取二维配置:
C('USER_CONFIG.USER_TYPE') //获取用户配置的用户类型设置
因为配置参数是全局有效的,因此C方法可以在任何地方读取任何配置,哪怕某个设置参数已经生效过期了。后面我们还会了解到C方法同样还具有给配置参数赋值的作用。(如果对C方法的命名比较奇怪的话,可以借助Config单词来帮助记忆)
2、动态配置(手册5.1.8)
之前的方式都是通过预先定义配置文件的方式,而在具体的Action方法里面,我们仍然可以对某些参数进行动态配置,主要是指那些还没有被使用的参数。
设置新的值:
C('参数名称','新的参数值');
例如,我们需要动态改变数据缓存的有效期的话,可以使用
C(' DATA_CACHE_TIME','60');
动态改变配置参数的方法和读取配置的方法在使用上面非常接近,都是使用C方法,只是参数的不同。因此掌握C方法的使用对于掌握配置有着关键的作用。
也可以支持二维数组的读取和设置,使用点语法进行操作,如下:
获取已经设置的参数值:
C('USER_CONFIG.USER_TYPE')
设置新的值:
C('USER_CONFIG.USER_TYPE','1');
3、扩展配置(手册5.19)
通常扩展配置文件的定义是为了某个特殊的需要,而分离出来的配置文件,这样的目的是为了便于维护和便于管理。系统也内置了一些扩展配置文件的定义,其中包括标签库定义,路由定义,静态定义,扩展模块定义,扩展操作定义,标签定义。惯例配置如下:
'APP_CONFIG_LIST' => array('taglibs','routes','htmls','modules','actions','tags'),
对于已经定义好的扩展配置文件系统会自动导入,并加入项目配置的缓存文件里面。例如:
路由配置文件routes.php的定义会自动并入:
C('_routes_');
后面怎么用这个扩展配置,就完全看应用自己的需要了,扩展配置对于扩展配置文件的某个配置项的获取,使用下面的方式:
C('_扩展配置名称_.configName');
// 例如
C('_modules_.extend');
如果需要增加额外的扩展配置文件,只需要在项目的配置文件里面增加额外的配置文件名称即可,例如:
'APP_CONFIG_LIST' => array('taglibs','routes','htmls','modules','actions','tags','myconfig')
注意事项:
² 扩展配置文件更改后,需要删除项目编译缓存文件才会生效;
² 对于没有定义的扩展配置文件系统不会自动加载;
² 注意扩展配置文件里面的配置参数的获取方式有别于一般的项目配置参数。
² 考虑到扩展配置的特殊需要,扩展配置里面的设置项是有大小写区分的。
四、项目入口文件
项目入口文件实在项目初始化进行加载,可以通过这一个常量在以后运行的时候都去找这个路径,防止用户直接访问我们的敏感文件。
define('APP_NAME', 'Myapp');
//让thinkphp在加载的时候,能很好的区分。
//能够让我们以后在做权限管理的时候,RBAC的时候,能够很好的控制前后台的权限分开
/*************************/
define('APP_PATH', '.');
//整个的网站是一个项目(project)工程,APP_PATH,应用路径(项目路径)比如Admin和Home
// 定义ThinkPHP框架路径define('THINK_PATH','./ThinkPHP');
//加载框架入口文件
require(THINK_PATH."ThinkPHP.php");
//实例化一个网站应用实例
App::run();//面向对象当中的静态方法和静态属性。
/*等同与下面
$App=new App();
$App->run();
*/