froid

thinkphp学习总结

thinkphp3.2 手册目录:http://www.kancloud.cn/manual/thinkphp/1678

http://www.aichengxu.com/view/39961

一、页面跳转

1.URL模式用来定向请求到模块、控制器和操作,如pathInfo模式:http://localhost/index.php/home/user/login/var/value/ 方法不存在,则为模版

2.页面跳转$this->success(“新增成功”,’/user/index’);

$this->success("添加成功",U(\'office/index\'));跳转方法

3.页面重定向$this->redirect("office/index");跳转方法

4.显示模版$this->display("/office/officeJudge");

$this->display(\'Member:read\'); 通常默认的视图目录是View

5.ajax的返回$this->ajaxReturn(eval("return $xsq;"));

 

U方法:默认当前模块,,U(\'office/index\')为office控制器的index方法

二、变量获取

1.后台获取,推荐用I方法,注意怎么提交怎么取,取值为方括号

$id = $_GET[\'id\']; 相当于$id = I(\'get.id,””)不存在返回“”

2.前台显示

$this->assign("condition",$condition);

直接$取值value="{$condition}"

数组<volist name="office_list" id="vo">

       <tr><td>{$num++}</td>

           <td>{$vo.name}</td>

           <td><a href="__CONTROLLER__/deleteOfficeJudge?id={$vo.id}" onclick="del()">删除</a></td></tr></volist>

三、配置文件

$DB_CONFIG = array(

    \'DB_TYPE\'   => \'mysql\', // 数据库类型

    \'DB_HOST\'   => \'127.0.0.1\', // 服务器地址

    \'DB_NAME\'   => \'evalute\', // 数据库名

    \'DB_USER\'   => \'root\', // 用户名

    \'DB_PWD\'    => \'\', // 密码

    \'DB_PORT\'   => 3306, // 端口

    \'DB_PREFIX\' => \'think_\', // 数据库表前缀

    \'DB_CHARSET\'=> \'utf8\', // 字符集

    \'DB_DEBUG\'  =>  TRUE, // 数据库调试模式 开启后可以记录SQL日志

);

$URL_CONFIG = array(

    \'URL_MODULE\' => 0,

    \'DEFAULT_FILTER\'   => \'htmlspecialchars,trim\',

);

return array_merge($DB_CONFIG,$URL_CONFIG);

四、CURD操作

实例化:D会去实例化对应Model,有验证用它。M仅对数据库增删查改。

数据增改:自动验证,令牌验证(防重复提交)和自动完成在create方法完成。$User->create($data);可以先在$User赋值,也可以在$data数组赋值。$User->add();写入数据库,因为create过所以add不传数据。也可不创建直接add($data)。save类似。

数据读取:连贯操作;查询条件尽量使用数组方式,这是更为安全的方式;

$Model->where("id=%d and username=\'%s\' ",array($id,$username))->select();

数据删除:$Form->delete(5);表示删除主键为5的

页面的删除提示

function del(){

    if(!confirm("确认要删除?")){

       window.event.returnValue = false;

    }

}

五、视图模型

namespace Home\Model;

use Think\Model\ViewModel;

class ContentModel extends ViewModel{

    public $viewFields = array(

     \'paper\'=>array(\'name\'), \'pcontent\'=>array(\'id\',\'qOrder\',\'paperId\',\'itemId\',\'_on\'=>\'paper.id=pcontent.paperId\'),

     \'question\'=>array(\'subName\',\'option\'=>\'radio\',\'startDesc\',\'endDesc\',\'_on\'=>\'pcontent.qId=question.id\'),

     \'type\'=>array(\'name\'=>\'type\',\'_on\'=>\'type.id=question.type\'),

     \'item\'=>array(\'name\'=>\'itemName\',\'_on\'=>\'pcontent.itemId=item.id\'),

   );

}

六、模版替换-特殊字符串

__APP__: 会替换成当前应用的URL地址 (不含域名)

__MODULE__:会替换成当前模块的URL地址 (不含域名)

__CONTROLLER__(__或者__URL__ 兼容考虑): 会替换成当前控制器的URL地址(不含域名)

__ACTION__:会替换成当前操作的URL地址 (不含域名)

__SELF__: 会替换成当前的页面URL

__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/

七、文件上传

<input type="file" name="photo"/>

<img style=\'margin:10px;border:1px solid black;\' src="__ROOT__/Uploads/{$office_info.photo}" />

 

$config = array(

      \'maxSize\'    =>    3145728,

      \'rootPath\'   =>    \'./Uploads/\',

      \'savePath\'   =>    \'\',

      \'saveName\'   =>    array(\'uniqid\',\'\'),

      \'exts\'       =>    array(\'jpg\', \'gif\', \'png\', \'jpeg\'),

      \'autoSub\'    =>    true,

      \'subName\'    =>    array(\'date\',\'Ymd\'),

);

$upload = new \Think\Upload($config);// 实例化上传类

$info   =   $upload->upload($_FILES[\'photo\']);

if(!$info) {// 上传错误提示错误信息

       $this->error($upload->getError());

}else{// 上传成功 获取上传文件信息

        echo $info[\'savepath\'].$info[\'savename\'];

}

八、验证码

<img src=\'__MODULE__/user/verify\' onclick="show(this)" >

public function verify(){

    $Verify = new \Think\Verify;

    $Verify->useImgBg = true;

    ob_clean();//丢弃输出缓冲区中的内容

    $Verify->entry();

}

九、引入菜单文件

<include file="Public/header.html"/>

十、修改时-单选框,复选框

单选 用eq

<select name="type" value="{$question_info.type}">

    <volist name="type_list" id="t">{$t.id}

       <eq name="t.id" value="$question_info.type">

           <option value="{$t.id}"  selected="selected">{$t.name}</option>

           <else/>

              <option value="{$t.id}">{$t.name}</option>

       </eq>

    </volist>

</select>

复选框 用in

<volist name="radio_list" id="r">

    <in name="r.id" value="$question_info.option">

       <input name="radio[]" type="checkbox" value="{$r.id}" checked="checked">{$r.opname}

       <else/>

       <input name="radio[]" type="checkbox" value="{$r.id}">{$r.opname}

    </in>

</volist>

复选框提交后值的处理

foreach ($_POST[\'radio\'] as $key => $value) {

       $option = $option.$value.",";

}

$data[\'option\'] = substr($option,0,strlen($option)-1);

分割字符串

if($question_info[\'option\'] != null){

$question_info[\'option\'] = explode(",",$question_info[\'option\']);}

十一、验证用户名是否已存在ajax+jquery

返回值echo json_encode($user_list);

function checkName(){

       $.ajax({

           type:"POST",

           url: "__CONTROLLER__/testUser",

           data:"uname="+$(\'#uname\').val(),

           success: function(msg){

              // for(var mi in eval(\'(\'+msg+\')\')){

              // alert(mi+"-->"+eval(\'(\'+msg+\')\')[mi]);

              // }

                if(eval(\'(\'+msg+\')\') != null){

                  $(\'#notice\').html( "已存在");

                }else{

                  $(\'#notice\').html( "可以使用");

                }

           }

       });

    }

十二、分页

$count = $type->count();

$Page = new \Think\Page($count,2);

$Page -> setConfig(\'header\',\'共%TOTAL_ROW%条\');

$Page -> setConfig(\'first\',\'首页\');

// $Page -> setConfig(\'last\',\'共%TOTAL_PAGE%页\');

$Page -> setConfig(\'prev\',\'上一页\');

$Page -> setConfig(\'next\',\'下一页\');

// $Page -> setConfig(\'link\',\'indexpagenumb\');//pagenumb 会替换成页码

$Page -> setConfig(\'theme\',\'%HEADER% %FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%\');

$show = $Page->show();

$type_list = $type->order(\'name desc\')->limit($Page->firstRow.\',\'.$Page->listRows)->select();

$this->assign("type_list",$type_list);

$num = $Page->firstRow + 1;//序号

$this->assign("num",$num);

$this->assign("page",$show);

<tr><td colspan="3"><div>{$page}</div></td></tr>

分页带条件,则条件查询的form表单采用get方式提交

十三、自定义菜单

1.js中的数组,注意Array的A大写

var menus = new Array();

menus[0] = {"id":1,"name":"体育","ismenu":"1"}

menus[1] = {"id":2,"name":"音乐","ismenu":"1"}

2.js取发生事件的控件的信息

onclick="del(this)"

del中var myid = obj.id;

3.jquery取控件的值

$("#xsq").attr("value",value);

$("#xsq").val();

十四、调试

F12 看元素,看网络传输

$this->show(“2333”);

var_dump($a); php写法,在thinkphp中dump($a)效果相同

分类:

技术点:

相关文章: