资源描述
thinkphp学习笔记.docx
《thinkphp学习笔记.docx》由会员分享,可在线阅读,更多相关《thinkphp学习笔记.docx(9页珍藏版)》请在冰豆网上搜索。
![thinkphp学习笔记.docx](https://file1.bdocx.com/fileroot1/2023-1/29/486502d9-1de2-4a07-9eed-6d535d650e28/486502d9-1de2-4a07-9eed-6d535d650e281.gif)
thinkphp学习笔记
1.A快速创建Action对象
$action = new UserAction();//等同于以下写法:
$action = A("User");
而且,如果当前的UserAction类还没有引入的话,A方法会自动引入。
并且具有单例模式的支持,不会重复创建相同的Action对象。
A方法支持跨项目调用,例如:
$action = A("User",'Admin');//实例化Admin项目的UserAction类
再例如我们的程序有2个Action分别是IndexAction和TestAction,在IndexAction中有个myHello方法能够输出helloworld,如果我也想在TestAction中也输出同样一段文字怎么办?
最原始的方法首先我们导入IndexAction.class.php这个文件,然后newIndexAction,最后调用myHello方法才行。
代码一般为:
PHP代码
1.
php
2.import("@.Action.Index");
3.//导入本项目目录下Action目录下的Index.class.php文件。
4.class TestAction extends Action{
5. public function index()
6. {
7. $index=new IndexAction();//实例化IndexAction
8. echo $index->myHello();//调用myHello()方法
9. }
10.}
11.?
>
那么,如果我们用A函数,怎么写呢?
PHP代码
1.
php
2.class TestAction extends Action{
3. public function index()
4. {
5. $index=A("Index");
6. echo $index->myHello();
7. }
8.}
9.?
>
呵呵,少写很多代码吧。
当然,这还不是最偷懒的方法,请看下边的R()函数,就知道什么是偷懒的极致了。
来源:
(-Thinkphp 单字母内部函数 ADSLCFI_lynne_新浪博客
2:
B函数
这是随着行为应运而生的新生函数,可以执行某个行为,例如B('app_begin');就是在项目开始之前,执行这个行为定义的所有函数,支持2个参数,第二个参数支持需要接受一个数组,例如B('app_begin',array("name"=>"tdweb","time"=>time()));这样。
3:
C函数
获取配置值,这个大家用的应该不少。
虽然使用方便,但是C函数无疑是一个非常强大的函数。
获取值:
获取所有设置:
C();不传递任何参数,返回一个包含所有设置的数组。
获取指定配置:
C('URL_MODEL')这样就能得到URL_MODEL的配置信息
获取指定二维数组配置:
C("array.name"),这样就返回数组array下的key为name所对应的值
设置值:
为二维数组赋值C("array.name","value"),原理同上(获取array.name的值),后边的value是值面向
批量赋值:
$test=array("URL_MODEL"=>1,"THIN_MODEL"=>true");
C($test);
这样直接将数组里的值赋值了
判断是否赋值:
C("?
URL_MODEL")这样前边加个"?
",如果已经赋值,则返回true
需要说明的是,这里虽然更改了配置的值,但是仅仅是这个页面做了更改,到下个页面就不起作用了,如果想改就永久更改,那么需要配合F函数,将配置文件写入config.php才行。
4:
D快速创建模型数据对象
先定义好模型类,如UserModel,然后就可以用D()函数对数据进行操作了。
例如:
先在"你的项目"\Lib\Model下建立一个名为UserModel.class.php的PHP脚本,内容如下:
classUserModelextendsModel{}
然后,无需增加任何属性和方法,就可以进行如下操作:
$User=D("User");//实例化User对象,User是你在数据库建立的一个名为"前缀_user"的数据表
也可以用$User=newUserModel()代替,进行实例化对象的操作。
实例化之后,就可以对数据进行增删查改等一系列操作了,如:
$User->find
(1);//查找主键为1的记录
5.S快速操作缓存方法
ThinkPHP把各种缓存方式都抽象成统一的缓存类来调用,而且ThinkPHP把所有的缓存机制统一成一个S方法来进行操作,所以在使用
不同的缓存方式的时候并不需要关注具体的缓存细节。
如:
S('data',$Data);//使用data标识缓存$Data数据
S('data',$Data,3600);//缓存$Data数据3600秒
$Data=S('data');//获取缓存数据
S('name',null);// 删除缓存标识name
6.L快速操作语言变量
L方法提供了多语言的支持,可以快速设置和获取语言定义。
L(‘USER_INFO’,’用户信息’);//设置名称为USER_INFO 的语言变量
L(‘USER_INFO’); // 获取USER_INFO的语言变量值
//批量赋值
$array[‘USER_INFO’] = ‘用户信息’;
$array[‘ERROR_INFO’] = ‘错误信息’;
L($array);
7.C快速操作配置变量
C(‘USER_AUTH_ON’,true); //设置名称为USER_AUTH_ON 的配置参数
C(‘USER_AUTH_ON’); //获取USER_AUTH_ON的变量值
同L一样,C也支持批量赋值
注意:
配置参数不区分大小写
此外从1.5版本开始,C方法还支持二维数组的操作
C('USER.USER_TYPE',1);
C('USER.USER_AUTH_ON');
8.F文件数据保存方法
F方法主要用于项目的文件数据的写入、更改和删除,其工作机理和S方法是类似的,区别在于用途不同,数据保存的目录也不同,而且不能指定缓存方式,因为默认就是文件形式保存数据。
F方法使用了var_export方法,所以只能支持简单数据类型,不支持对象的缓存
9:
R函数
还记得我们的A函数吧,如果仅仅想执行某个方法,其实用R函数更方便,刚才的可以替换成PHP代码
1.
php
2.class TestAction extends Action{
3. public function index()
4. {
5. $index=R("Index","myHello");
6. echo $index;
7. }
8.}
9.?
>
Thinkphp验证机制
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
ThinkPHP示例:表单提交、自动验证和自动填充
标题:
23px"class="largebLeft"> |
邮箱: | 23px"class="largebLeft"> |
内容: | |
验证码: | 23px"class="small">输入对应的数字 |
| |
|
|
| 1pxdottedsilver">{$vo.title}gray">[{$vo.email}{$vo.create_time|date='Y-m-dH:
i:
s',###}]
| {$vo.content|nl2br} |
form类:
程序代码
php
classFormModelextendsModel{
//自动验证设置
protected$_validate=array(//这里必须定义为$_validata用来验证
array('title','require','标题必须!
',1),
array('email','email','邮箱格式错误!
',2),
array('content','require','内容必须'),
array('verify','require','验证码必须!
'),
array('verify','CheckVerify','验证码错误',0,'callback'),//callback使用方法验证,前面定义的验证规则是一个当前Model类的方法,这里可能有些不太理解
//那就要看本类的最后一个方法了,现在明白了吧
array('title','','标题已经存在',0,'unique','add'),//附加验证unique,unique验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值
);
/*think的验证机制,省去了不少麻烦非空:
equire邮箱:
email验证码正确:
CheckVerify
array()数组内容array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间)
验证条件
EXISTS_TO_VAILIDATE或者0存在字段就验证(默认)
MUST_TO_VALIDATE或者1必须验证
VALUE_TO_VAILIDATE或者2值不为空的时候验证
附加规则配合验证规则使用,包括:
function使用函数验证,前面定义的验证规则是一个函数名
callback使用方法验证,前面定义的验证规则是一个当前Model类的方法
confirm验证表单中的两个字段是否相同,前面定义的验证规则是一个字段名
equal验证是否等于某个值,该值由前面的验证规则定义
in验证是否在某个范围内,前面定义的验证规则必须是一个数组
unique验证是否唯一,系统会根据字段目前的值查询数据库来判断是否存在相同的值
regex使用正则进行验证,表示前面定义的验证规则是一个正则表达式(默认)
*/
//自动填充设置
//由上面推导,下面这个是自动填充字段了,方便明了
protected$_auto=array(//同样这里必须定义为$_auto
array('status','1','ADD'),
array('create_time','time','ADD','function'),//这里指明填充使用函数time()
);
/*
数组因子:
array(填充字段,填充内容,填充条件,附加规则)
填充条件包括:
ADD新增数据的时候处理(默认方式)
Update更新数据的时候处理
ALL所有情况下都进行处理
附加规则包括:
function使用函数
callback回调方法
field用其它字段填充
string字符串(默认方式)
*/
publicfunctionCheckVerify(){
returnmd5($_POST['verify'])==$_SESSION['verify'];
}
}
?
>
indexaction类:
程序代码
php
classIndexActionextendsAction{
//首页
publicfunctionindex(){
$Form=D("Form");//创建一个对象
$list=$Form->top6('','*','iddesc');//从数据库中读取最新6条记录,并且安id倒序输出
$this->assign('list',$list);//把数据传到模板里
$this->display();
}
//处理表单数据
publicfunctioninsert(){//此方法对应表单的ACTION="__URL__/insert"
$Form=D("Form");
if($Form->create()){//创建Form数据对象,默认通过表单提交的数据进行创建,为下面写入数据库做准备
$Form->add();//新增表单提交的数据,吧上面创建的数据对象提交
$this->redirect();//返回上一个模块,页面跳转可以说是
}else{
header("Content-Type:
text/html;charset=utf-8");
exit($Form->getError().'[history.back()">返回]');
}
}
//生成验证码
//这个方法没什么好说的,固定格式
publicfunctionverify(){
import("ORG.Util.Image");
Image:
:
buildImageVerify();//这里两个冒号是调用静态方法
}
}
?
>
心得:
从think对表单提交过来的数据处理来看,是我以前想都不敢想的简单,数据的验证更是方便