Thinkphp学习文档:http://doc.thinkphp.cn/manual/start.html
thinkphp命名 文件名采用驼峰法,首字母大写, 类名和文件名一致方法和属性采用驼峰法,首字母大写 函数名采用小写字母加下划线 数据表加字段采用小写字母加下划线 配置参数和常量使用大写字母加下划线以 双下划线打头的是魔术方法
目录 说明
Common 项目公共文件目录,一般放置项目的公共函数
Conf 项目配置目录,项目所有的配置文件都放在这里
Lang 项目语言包目录(可选 如果不需要多语言支持 可删除)
Lib 项目类库目录,通常包括Action和Model子目录
Tpl 项目模板目录,支持模板主题
Runtime 项目运行时目录,包括Cache(模板缓存)、Temp(数据缓存)、Data(数据目录)和Logs(日志文件)子目录,如果存在分组的话,则首先是分组目录。
thinkphp惯例配置文件
Thinkphp/common/convention.php
项目配置文件
Conf/config.php
thinkPHP缓存
define('RUNTIME_PATH','./MyApp/temp/'); 定义缓存存放路径
define('NO_CACHE_RUNTIME',True); 不生成核心缓存
define('STRIP_RUNTIME_SPACE',false); 对于编译缓存的内容是否去掉空白和注释
thinkPHP类库导入,Think,ORG,Com将默认为系统基类库下相关目录
import("Think[ORG][Com].util.session") 将导入系统基类的lib/Think[ORG][Com]/util/session.class.php
import("MyApp.Action.UserAction") 将导入MyApp/lib/Action/UserAction.class.php
等同于 import("@.Action.UserAction");
Vendor('Zend.Filter.Dir') 将导入第三方类库目录vendor/zend/fileter/dir.php
'APP_AUTOLOAD_PATH' => 'Think.Util.,ORG.Util.', 设置附加文件的自动导入路径,增加了一个ORG目录下
,注意需要多加一个点。
thinkPHP分组
配置文件中加入
'APP_GROUP_LIST'=>'Home,Admin',
'DEFAULT_GROUP'=>'Home',
项目目录结构中,每层加上Home,Admin的文件夹分层
访问效果
index.php/Home/index,由于Home是默认分组,所以还可以写为 index.php/index
idnex.php/Admin/index
model类可以不分组
URL伪静态 'URL_HTML_SUFFIX' =>'.shtml', 将所有路径后加上.shtml的伪静态效果 URL重写 apache的http.conf配置文件中加载 mod_rewrite.so模块 AllowOverride None的None改为All 确保URL_MODEL设置为2 将.htaccess文件放到入口文件同级目录下 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule> 重启后就可以省略掉index.php
URL访问不再区分大小写
'URL_CASE_INSENSITIVE' => true
但如果我们定义一个UserTypeAction模块类,相应的多单词的模块名将变为
/index.php/user_type/list
而不能是
/index.php/usertype/list
空操作
如果系统找不到相应的方法,将定位于_empty方法
Public function _empty(){
如果找不到相应的模块,将定位于空模块EmptyAction
Class EmptyAction extends Action{
调用其他项目的其他模块中的方法
R("User","importUser","App2") 调用app2项目中的 UserAction模块中的importUser方法
R方法的调用格式:
R('[项目://][分组/]模块/操作','参数','控制器层名称')
R('Admin://Tool/User/info') //表示调用Admin项目Tool分组的User模块的info操作方法
R('User/info',array(15)) 表示调用当前项目的User模块的info操作方法,并且id参数传入15
重定向
success可以设置为ajax返回,如:$this->success("新增成功!",true)
还可以使用重定向 $this->redirect('User/list', array('cate_id'=>2), 5,'页面跳转中~')
停留5秒后跳转刡User模块癿list操作,并且显示页面跳转中字样
thinkphp的curd操作 连贯操作不分前后,select在最后即可 where方法,查询范围定义 table定义要操作的数据表 $model->table('think_user user')->where('id=1')->select(); data方法在新增和保存数据之前对数据对象赋值 field方法定义要查询的字段 $model->field('id,nickname as name')->select(); order方法 对结果进行排序 order('id desc,statue desc') limit方法对结果限制 limit('offset,length') distinct对查询结果进行唯一过滤 $model->disctinct(true)->select() 插入数据 方式一:
$model=M('User'); $model->create(); $model->add();
方式二:
M('User')->add($data);
读取数据 $model=M('User');
//不等于条件(id!=2),where条件的写法
$where['id'] = array('neq',2);
//查询id为1,2,5的值,where条件:
where(array('id'=>array('in','1,2,5')));
$list=$model->where('status=1')->order('create_time')->limit(10)->select()/find()/getField('id,name');//返回的是数组
find方法只返回一条记录,getField方法返回指定字段值
更新数据
方式一:
$model=M('User');
$data['name']='Thinkphp';
$data['email']='Thinkphp@gmail.con';
$model->where('id=5')->save($data);
方式二:
M('User')->save($data);//$data中含主键
或者:
$model=M('User');
$model->where('id=5')->setField('name','Thinkphp');
->setField(array('name','email'),array('Thinkphp','Thinkphp@gmail.com'));
->setInc('score','id=5',3); id等于5的用户积分加3
->setDec('score','id=5',3) id等于5的用户积分减5
删除数据
$model=M('User');
$model->where('id=5')->delete();
$model->where('status=0')->delete();
实例化空模型类
如果需要使用原生 SQL ,需要实例化一个空模型:
M()->query('SELECT * FROM think_user');
thinkphp自动验证和自动完成 令牌验证 在action中建立接受提交数据的方法,写入create方法 if( $user->create()){} 在模板中建立<form>,method设置为post方法,将自动加上令牌 在配置文件中可以使用 'TOKEN_ON'=>false;来关闭令牌 自动验证 需要在model中定义$validate属性,格式为: array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间) 验证字段:需要验证的字段 验证规则:需要验证的规则,需要结合附加规则 错误提示:如果出现错误,需要一个什么样的提示 验证条件:0存在字段就验证(默认) 1必须验证 2值不为控时候验证 附加规则:配合验证规则,regex 前面是使用正则验证 function前面是使用函数验证 confirm 前面定义的是一个字段名,验证两个字段是否相等 equal验证是否等于某一个值 in验证是否在某个范围内 unique验证是否唯一 callback使用方法验证,前面规则是本类的一个方法 TP封装:require 字段必须验证;eamil 验证邮箱;url 验证url地址;currency 货币;number 数字 验证时间:1 新增数据时候验证 2 编辑数据时候验证 3 全部情况下验证(默认) UserModel.class.php class UserModel extends Model{ //对应数据库中的表user protected $_validate=array( array('username','require','用户名必填'), array('username','checklen','用户名长度过长或过短',0,'callback'), array('password','require','密码必填'), array('repassword','require','重复密码必填'), array('password','repassword','两次密码不一致',0,'confirm'), array('createtime','number','您输入的不是数字'), array('createip','email','邮箱格式不正确'), array('verify','require','验证码必须!'), //默认情冴下用正则迕行验证 array('name','','帐号名称已绊存在!',0,’unique’,1), // 在新增癿旪候验证name字段是否唯一 ); function checklen($data){ if(strlen($data)>15 || strlen($data)<5){ return false; }else{ return true; } } } UserAction.class.php class UserAction extends Action { function reg(){ $this->display(); } function regadd(){ $user=D('user'); if($user->create()){ if($user->add()){ $this->success('注册成功'); }else{ $this->error('注册失败'); } }else{ $this->error($user->getError()); } } } 自动完成 在model类定义的$_auto属性,可以完成数据自动处理,格式为: array(填充字段,填充内容,填充条件,附加规则) 填充字段:需要处理的字段 填充条件:1新增时候处理 2更新数据的时候处理 3所有情况都处理 附加规则:function使用函数 callback回调方法,内容是当前模型的一个方法 field填充内容是一个字段的值 string填充的是一个字符串 protected $_auto = array ( array( 'status','1'), // 新增的时候把 status字段设置为 1 array('password','md5',1,'function') , // 对password 字段在新增的时候使 md5 函数处理 array('name','getName',1,'callback'), // 对name字段在新增癿旪候回调getName方法 array('createtime','time',3,'function' ), // 对create_time 字段在更新的时候写入当前时间戳 );
模板设置:
普通标签默认开始标记是 {,结束标记是 }。也可以通过设置TMPL_L_DELIM和TMPL_R_DELIM进行更改。例如,我们在项目配置文件中定义: 'TMPL_L_DELIM'=>'<{', 'TMPL_R_DELIM'=>'}>',
1.自定义路径自动加载:在配置文件中convention.php配置
'APP_AUTOLOAD_PATH' =>'@.Common,@.Tool',
2.加载第三方类库:如Think/Extend/Vendor/Mine/MyTest.class.php
Vendor('Mine.MyTest','','.class.php');//后缀默认是.php,如果是.class.php需传
第三个参数,第二个参数表示基本路径,空表示Think/Extend/Vendor/
导入之后,先new一下类就可以使用类中的方法了,第三方类可以完全脱离Thinkphp
框架而存在,不必遵循Thinkphp的命名规范,类的文件名可以是.php也可以是.class.php。
3.M方法和D方法的区别
ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,
而 D方法 用于实例化一个用户定义模型类。
M方法 和 D方法 都可以在模型类文件不存在的情况下直接使用的,但显然 M方法 更高效;
但要使用模型类里面业务逻辑,就必须使用 D方法。
注意:D('User'),表名的首字母要大写
4.加载自定义配置文件my.php
(1)在config.php文件中的这项加上自定义文件my.php的路径,以下是在同一目录下的情况:
'LOAD_EXT_CONFIG' => 'my'
(2)my.php中的内容: <?php return array( 'site' => 'zrptest.com' );