TP回顾

阅读更多

【前言】

    用了一段时间的TP框架,发现查询手册其实也是必备技能。因为不可能都记住,而且版本更迭也很快。这里总结下最近应用TP3.2.3的难点和疑惑点

 

【主体】

 (1)D方法

D方法是一个自定义数据模型后用来调取数据库表名的方法,你使用和M一样,区别就在于M只调用系统Model,而U是调用你定义的Model

(2)I方法获取和POST获取

I('get.id')和I('post.'),I方法带过滤效果

(3)辅助方法

(4)连贯操作

(5)联表查询

(6)上传/添加操作时的上传时间

if(IS_POST){//处理提交
                // 接收除了file外其他字段,因为file无法通过post接收
                $post = I('post.');
                //补全addtime字段
                $post['addtime']=time();
                //实例化模型
                $model = M('doc');
                $result = $model->add($post);
                //判断保存结果
                if($result){
                    $this->success('添加成功',U('showList'),3);
                }else{
                    $this-error('添加失败');
                }
            }else{//展示模板
                $this->display();
            }

   拓展***:

   模板中读取时间还需转换格式

{$vol.addtime|date='Y-m-d H:i:s',###}

(7)目前所用过的快速方法:U(URL组装),D(实例化自定义模型),M(实例化父类模型),G(性能测试)

  ①G语法:如果第三个参数是数字,则表示统计代码的执行时间,数字表示精确的小数位数(单位:us微秒---1秒=1000毫秒=1000000微秒);若为字符m,则表示统计内存开销(单位:byt),这种需要服务器的支持

G('开始标记')
 //需要统计效率的代码段
G('结束标记')
G('开始标记','结束标记',‘数字 / 字符’)

案例:使用G方法统计某段代码执行时间开销

public function test(){
            //定义开始标记
            G('start');
            //代码段
            for($i=0;$i<100000;$i++){
                // echo $i;
            }
            //结束标记
            G('stop');
            //开始统计,4表示精确到后4位小数
            echo G('start','stop',4);
}

 测试后输出:0.0030,所以执行了0.0030秒

   ②I方法

处理表单信息的提交操作

在控制器deptController.class.php里add方法判断是否是POST提交。若是则提交,否则展示

扩展:

          1. 方法判断---------判断请求是否是post,之前用$_POST判断,但在ThinkPHP里系统封装了几个比较实用的常量,可以直接用常量来判断

             IS_POST、IS_GET、IS_AJAX、IS_CGI、IS_PUT等

          2. 数据接收---------之前用$_POST接收数据,在ThinkPHP里使用I快速方法来接收数据。I方法可以接收任何类型输入post、get、request、put等。且系统默认自带防止SQL

注入的方法(使用PHP内置函数htmlspecialchars,将预定义字符<,>转化为HTML实体字符)。因为$POST没有对数据进行过滤,还得手动过滤。所以推荐使用I方法接收数据,

自带过滤效果,防止SQL注入

         3.I 快速方法语法:I('变量类型.变量名',['默认值'],['过滤方法']),过滤方法可以自定义过滤

            接收整个数组:I('get');

public function add(){
            //判断请求类型,若是post则提交,否则展示
            if (IS_POST) {
                //处理表单请求
                $post = I('post.');
                //成功接收后,写入数据
                $model = M('dept');//模型实例化
                $result = $model->add($post);
                //判断返回值
                if ($result) {
                    $this->success('添加成功',U('showList'),3);
                }else{
                    $this->error('添加失败');//默认跳到上一页
                }
            }else{
                $model = M('dept');//模型实例化
                $data = $model->where('pid = 0')->select();//条件查询
                $this->assign('data',$data);//变量分配传递到模板
                $this->display();
            }
        }

  ③U方法:参考http://www.cnblogs.com/jianxian/p/8637061.html

 

(8)截取字符串、curl发送get与post请求、去除空格等方法封装

参考网址:http://www.cnblogs.com/jianxian/p/8689105.html

 

(9)上传错误

    查看源码后发现上传错误,所以这里总结下上传错误0-7

0--------------没有错误,上传成功
1--------------上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值!
2--------------上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值!
3--------------文件只有部分被上传!
4--------------没有文件被上传!
6--------------找不到临时文件夹!
7--------------文件写入失败!

 

(10)MVC心得->如果可以直接进行CURD操作的,简单的基本操作可以直接在控制器编写。如果数据需要保存处理等操作,则最好放到模型里,进行数据的CURD操作。

.

你可能感兴趣的:(PHP,后端积累)