1、 CI业务流程:
域名/入口(默认为index.php)/控制器/函数/参数1/参数2....
(入口设置:config.php中的$config['index_page'] = 'index.php';)
每个控制器都是一个 类Class, 在每个 Class 里面的 function 都是一个页面, 嗯, 这个概念很重要!访问(加载)页面都得访问对应控制器的对应function
CI中的URI字符串有着和它唯一对应的控制器(controller)类/方法,ci中的uri从控制器名开始
CI的控制器类类名首字母必须大写,继承核心的控制器类CI_Controller,并且
2、这个类的文件名必须和类名相同。
CI中每个页面都要通过控制器来装载 比如:
用户通过URL访问的就是某个控制器类中的具体成员方法,url方法段后的按次序传入方法中的形式参数
数据通过控制器以一个数组或是对象的形式传入视图 , 这个数组或对象作为视图载入函数的第二个参数
CI中$this->db->query()返回结果集的一个对象集合,每条记录为一个对象。
$this->uri->segment(n,default) 它允
3、许你重新分割一个详细的URI分段。 n 为你想要得到的段数。分割数按照从左至右的顺序编排,默认情况下URI没有分段那么该函数返回 FALSE(布尔值)。如果分段信息丢失,Segment函数还有第二个参数用来设置你的默认值
$this->load->helper("url");
anchor(uri,title,[attributes]); 类似a标签 title相当于a标签的value,attributes用来添加标签属性
base_url($uri) 获取config.php中的$config['base_url']的值.$uri
site_url($uri); 将u
4、ri变成完整的url 即$config['base_url'].$config['index_page'].$uri
redirect($uri,$method="location",$http_response_code=302) 重定向,即跳转页面 uri 从控制器类开始
$result=$this->db->query(".....");
$result->result(); 返回的是结果集的对象集合,一条记录为一个对象。
config.php中的$config['global_xss_filtering']=true; 自动防止攻击
this->input->
5、post('name'); 接收提交的数据
上传:
function up()
{
$config['upload_path']="./upload";
$config['allowed_types']="gif|jpg|png";
$config['max_size']="20000";
$this->load->library("upload",$config);
if($this->upload->do_upload('upfile'))
{
$data=array('upload_data'=>$this->upload->dat
6、a());
var_dump($data);
}
else
{
$error=array('error'=>$this->upload->display_errors());
var_dump($error);
}
}
session:
$this->load->library('session');
$arr=array('uid'=>$uid);
$this->session->set_userdata($arr);
echo '
';
echo $this->session->use
7、rdata('uid');
$this->session->unset_userdata($arr);
Kndb session的使用
这个类把ci自带的session类功能进行了扩展,将数据存储到数据库,所以要在配置文件config.php中进行配置
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
8、
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300
TP(2.0):
下面是一个标准的入口文件的写法:
9、PHP');
//定义项目名称和路径
define('APP_NAME', 'Myapp');
define('APP_PATH', './Myapp');
//define('RUNTIME_PATH','./admin/temp/');
//使~runtime.php文件保留空白和注释
//define('STRIP_RUNTIME_SPACE', false);
// 加载框架入口文件
require(THINK_PATH."/ThinkPHP.php");
//实例化一个网站应用实例
App::run();
?>
Thinkphp默认的惯例配置全
10、部在tp系统目录下的Common中的convention.php文件中
Runtime文件夹中的~app.php和~runtime.php是编译缓存文件
编译缓存的基础原理是第一次运行的时候把核心需要加载的文件去掉空白和注释后合并到一个文件中,第二次运行的时候就直接载入编译缓存而无需载入众多的核心文件
~runtime.php包含的是系统默认加载的核心文件由TP系统Common目录下的core.php文件决定
~app.php包含:1、项目配置文件(1、惯例配置-可以理解为默认配置,2、项目配置-可以理解为自定义配置。自定义配置的优先级高);2、项目公用函数文件common.p
11、hp
如果开发过程中对一些加载文件进行修改后,就得手动将生成的编译缓存删除,不然系统将读取编译缓存,这样就无法显现出修改的效果。这种情况下最好就不要产生编译缓存
不产生编译缓存的方法:在主入口文件中定义define('NO_CACHE_RUNTIME',true) 这样就不会产生~runtime.php文件了
每个控制器都是一个 类Class, 在每个 Class 里面的 function 都是一个页面, 嗯, 这个概念很重要! 访问(加载)页面都得访问对应控制器的对应function
控制器,模型和视图命名规则:
文件名首字母大写接着(控制器为Action,模型
12、为Model,视图为View),文件后缀为.class.php
类名必须与文件名相同,大小写也要一致,然后继承相应的父类,Action、Model、View......
控制器的私有方法不能作为一个页面被用户访问,但能在其他方法中被调用
ThinkPHP支持的URL模式包括普通模式、PATHINFO模式(默认模式)、REWRITE模式和兼容模式(根据环境的支持情况,智能的使用pathinfo或者普通模式)
在项目目录下的Conf目录中的config.php文件中以 'URL_MODEL'=>0,(0普通模式,1为pathinfo,2为rewrite,3为兼容) 进行修改
REW
13、RITE模式:不论是被重写的,还是没被重写的。都能够通过原有路径来进行访问。在项目入口文件同级的目录下面新建一个.htaccess ,rewrite模式会加大你服务的性能消耗
Pathinfo两种模式:
默认情况使用PATHINFO模式,ThinkPHP内置强大的PATHINFO支持,提供灵活和友好URL支持。PATHINFO模式根据不同的设置还包括普通模式和智能模式两种:
普通模式 设置URL_PATHINFO_MODEL参数为1
该模式下面URL参数没有顺序,例如
http:///appName/m/module/a/action/id/1
htt
14、p:///appName/a/action/id/1/m/module
以上URL等效
智能模式 设置URL_PATHINFO_MODEL参数为2 (系统默认的模式)
自动识别模块和操作,例如
http:///appName/module/action/id/1/ 或者
http:///appName/module,action,id,1/
在智能模式下面,第一个参数会被解析成模块名称(或者路由名称,下面会有描述),第二个参数会被解析成操作(在第一个参数不是路由名称的前提下),后面的参数是显式传递的,而且必须
15、成对出现,例如:
http:///appName/module/action/year/2008/month/09/day/21/
其中参数之间的分割符号由URL_PATHINFO_DEPR参数设置,默认为”/”,例如我们设置URL_PATHINFO_DEPR为“-”的话,就可以使用下面的URL访问
http:///appName/module-action-id-1/
注意不要使用”:” 和”&”符号进行分割,该符号有特殊用途。
略加修改,就可以展示出富有诗意的URL,呵呵~
如果想要简化URL的形式可以通过路由功能(后面会有描述
16、以及空模块和空操作。
在PATH_INFO模式下面,会把相关参数转换成GET变量,以及并入REQUEST变量,因此不妨碍URL里面的GET和REQUEST变量获取。
'APP_DEBUG'=>TRUE, 模拟linux操作系统来区分大小写(用方法1 display模板,模板文件名和url中的方法名大小写要一致)(文件夹的名称不区分大小写)
载入模板:在项目目录下Tpl文件夹->主题文件夹(默认是default文件夹)->控制器名文件夹->模板(模板名与方法名相同,但是项目里可能没有该控制器,或者该方法,但是模板可以照样display,只是一种命名规则)
$this->disp
17、lay(url[,编码[,mime]]);
1、 $this->display(); 载入当前控制器下当前方法的模板
2、 $this->display(‘方法名’); 模板名与方法名相同,但是项目的当前控制器可以没有这个方法,这个模板照样可以使用
3、 $this->display('[分组名:]控制器名:方法名') 其中分组名是可选的
4、$this->display('主题@控制器名:方法名');
5、$this->display('./public/test.html'); 也可以用相对路径,相对于主入口文件
(模板的js css文件如果用相对文件路径都要相对于主入口文件
18、)\
(用的时候大小写尽量和目录文件一致,这样比较规范)
模板普通标签的修改(在里面用assign进去的变量)
在项目配置文件中定义:
'TMPL_L_DELIM'=>'<{',
'TMPL_R_DELIM'=>'}>',
Thinkphp系统常量:
__ROOT__ 站点根目录地址
__APP__ 当前应用的入口文件地址 (从根目录'/'开始 下同)
__URL__ 当前控制器地址
__ACTION__ 当前方法地址
__SEFL__ 当前URL地址
__CURRENT__ 当前的控制器的模板目录
ACTION_NAME 当前方法名称
APP_PA
19、TH 当前应用目录
APP_NAME 当前应用名称
APP_TMPL_PATH 当前应用的模板目录
APP_PUBLIC_PATH 代表项目公共文件目录
CACHE_PATH 项目模版缓存目录
CONFIG_PATH 项目的配置文件放在什么地方
COMMON_PATH 项目的公共文件目录
DATA_PATH 项目数据文件目录 tp会自动缓存与表相关的结构信息
GROUP_NAME
HTML_PATH 项目静态文件目录(静态缓存文件目录)
IS_APACHE
IS_CGI
IS_IIS
IS_WIN 是否是windows操作平台
LANG_SET
20、 当前浏览器语言
LIB_PATH 项目lib目录
LOG_PATH 日志文件目录
LANG_PATH 语言文件目录
MODEL_NAME 当前模块名称
MEMORY_LIMIT_ON 当前内存限制
MAGIC_QUOTES_GPC 是否开启自动转义
TEMP_PATH 项目数据缓存路径设置
TMPL_PATH 项目模板目录
THINK_PATH TP系统目录
THINK_VERSION 版本
TEMPLATE_NAME 当前模板名称
TEMPLATE_PATH 当前模板路径
VENDOR_PATH 扩展类库目录
WEB_PUBLIC_PATH 网站
21、公用目录 (用来存放css js等文件,一般与入口文件同在一个目录)
以上系统常量在开发包 docs/cheatsheet中的.png文件中 有列举
完全开发手册中8.1中也有
模板中的常量:
__URL__ 当前控制器地址(从根目录'/'开始 下同)
__PUBLIC__ 网站公用目录 (用来存放css js等文件,与入口文件同在一个目录)
../Public 项目公共文件目录 Tpl/default中的Public文件夹
__TMPL__ 当前应用的模板目录 .......Tpl/default
__APP__ 应用入口文件地址
22、
__ACTION__ 当前方法地址
__SELF__ 当前整个url地址
在应用的config.php文件中
'TMPL_PARSE_STRING'=> array(
'__PUBLIC__' => '/Common', // 更改默认的__PUBLIC__ 替换规则
'__UPLOAD__' => '/Public/Uploads/', // 增加新的上传路径替换规则
),
可以自己定义和覆盖常量
第7课:(调试信息和trace信息都是加载到模板中去显示的)
Tp调试模式:(调试默认配置文件: tp系统目录下Common中的debug.php文件)
即在项目目
23、录下的Conf目录中的config.php文件中开启'APP_DEBUG'=>TRUE, 调试模式相关设置文件是tp系统目录下Common中的debug.php文件,当然也不开启'APP_DEBUG'(即不载入debug.php文件)直接在config.php文件中写入相关设置(设置项可以从debug.php文件中复制过去)
自定义调试文件(附加在默认上),在Conf目录下增加一个debug.php文件(格式要跟Common中的debug.php文件一样),在文件里添加自己需要的信息
DB_FIELDS_CACHE数据库字段缓存系统默认为开启状态,如果开启的话,会在Runtime\D
24、ata文件夹下生成文件缓存,并且修改字段之后,这个缓存无法记录你的操作,需要我们手动删除一次,对表的修改才会被程序读取到。 开启'APP_DEBUG',DB_FIELDS_CACHE数据库字段缓存为关闭状态,
页面Trace信息: (Trace默认配置文件:tp系统目录下Tpl中的PageTrace.tpl.php文件 )
一个用于开发调试的辅助手段。可以实时显示当前页面的操作的请求信息、运行情况、SQL执行、错误提示等,启用调试模式的话,页面Trace功能会默认开启(除非在项目的调试配置文件中关闭),并且系统默认的Trace信息包括:当前页面、请求方法、通信协议、请求时间、用户代理、
25、会话ID、运行情况、SQL记录、错误记录和文件加载情况。
自定义项目trace文件:在项目config.php文件中设置'TMPL_TRACE_FILE'=> ,
如果想在默认的trace信息基础上附加自己的trace信息,可以在项目的Conf目录下增加一个trace.php文件(格式参考该课相关文件)
在方法中也可以附加trace信息,$this->trace('名称',值);
调试时获取一段代码的运行时间:
debug_start('run');
//调试代码
debug_end('run');
memory_get_usage; //获取使用内存大小
ha
26、lt(''); //中断程序,输出函数传入的内容
模型调试:就是显示数据库操作类中的执行的sql语句
M()方法就是new Model();
Model对象->getLastSql();//获取上一条执行的sql语句
日志记录:sql级别日志必须在开启调试模式下才会记录
系统的日志记录是由核心的Log类完成的
在config.php文件中,'LOG_RECORD'=>TRUE,开启日志记录
'LOG_RECORD_LEVEL'=>array('EMERG','ALERT','ERR'), //添加要记录的级别,在Log类中找
TP手动记录日志:写在控制器方法中,
27、Log有个静态方法Log::write($message,$level,$type,$destination);//$type指记录方式
Log::record(); //记录到内存中
Log::save(); //可以把Log::record()函数放在内存的日志信息保存起来
在开发过程中建议开启APP_DEBUG
注意: