基础参考

一、ThinkPHP核心文件介绍
├─ThinkPHP.php 框架入口文件
├─Common 框架公共文件
├─Conf 框架配置文件
├─Extend 框架扩展目录
├─Lang 核心语言包目录
├─Lib 核心类库目录
│ ├─Behavior 核心行为类库
│ ├─Core 核心基类库
│ ├─Driver 内置驱动
│ │ ├─Cache 内置缓存驱动
│ │ ├─Db 内置数据库驱动
│ │ ├─TagLib 内置标签驱动
│ │ └─Template 内置模板引擎驱动
│ └─Template 内置模板引擎
└─Tpl 系统模板目录
#项目目录结构及说明:
Home 前台应用文件夹
├─Common 项目公共文件目录
├─Conf 项目配置目录
├─Lang 项目语言目录
├─Lib 项目类库目录
│ ├─Action Action类库目录
│ ├─Behavior 行为类库目录
│ ├─Model 模型类库目录
│ └─Widget Widget类库目录
├─Runtime 项目运行时目录
│ ├─Cache 模板缓存目录
│ ├─Data 数据缓存目录
│ ├─Logs 日志文件目录
│ └─Temp 临时缓存目录
└─Tpl 项目模板目录

M 项目目录/应用目录/Lib/Model

1.include引入的文件若出现错误,下面若还有代码会继续执行,不会出现致命错误,而require不可以
Public 用于存放前台目录Home与后台admin的公共的图片,js代码等;
Uploads 用于存放上传的图片,js代码等。
2.①直接echo
$_GET[‘name’];//以PATHINFO模式从URL中获取的。在火狐浏览器中无法显示成功,需要先赋值给一个变量再输出。
 
②ThinkPHP修改配置后要将Runtime编译的缓存文件夹删除后才能将配置生效,为使即时生效,要在入口文件(index.php)中开启调试模式:define(‘APP_DEBUG’,true);
 
③REWRITE模式的开启:wamp->Apache->httpd.conf查找rewrite然后去除#将其开启并且写一个.htaccess文件(该文件内容为
  <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>)
放到项目文件夹下,并且重启wamp就可以了。

二、ThinkPHP的MVC对应的目录 //了解

 V 项目目录/应用目录/Tpl

一、ThinkPHP的介绍            //了解
    MVC
        M – Model 模型                工作:负责数据的操作
        V – View  视图(模板)        工作:负责前台页面显示
        C – Controller 控制器(模块) 工作:描述功能
    框架
二、ThinkPHP的获取            //了解
    
三、ThinkPHP核心文件介绍      //了解
    ├─ThinkPHP.php     框架入口文件
    ├─Common 框架公共文件
    ├─Conf 框架配置文件
    ├─Extend 框架扩展目录
    ├─Lang 核心语言包目录
    ├─Lib 核心类库目录
    │  ├─Behavior 核心行为类库
    │  ├─Core 核心基类库
    │  ├─Driver 内置驱动
    │  │  ├─Cache 内置缓存驱动
    │  │  ├─Db 内置数据库驱动
    │  │  ├─TagLib 内置标签驱动
    │  │  └─Template 内置模板引擎驱动
    │  └─Template 内置模板引擎
    └─Tpl 系统模板目录
四、实验环境搭建              //了解
五、项目搭建                  //重点
    #项目目录结构及说明:
        Home 前台应用文件夹
        ├─Common 项目公共文件目录
        ├─Conf 项目配置目录
        ├─Lang 项目语言目录
        ├─Lib 项目类库目录
        │  ├─Action Action类库目录
        │  ├─Behavior 行为类库目录
        │  ├─Model 模型类库目录
        │  └─Widget Widget类库目录
        ├─Runtime 项目运行时目录
        │  ├─Cache 模板缓存目录
        │  ├─Data 数据缓存目录
        │  ├─Logs 日志文件目录
        │  └─Temp 临时缓存目录
        └─Tpl 项目模板目录
六、补充知识                  //了解
Public用于存放前台和后台公用的一些例如图片,JS文件等
Uploads用于存放上传的图片文件等

M 项目目录/应用目录/Lib/Model
V 项目目录/应用目录/Tpl
C 项目目录/应用目录/Lib/Action
url的4种访问方式 //重点!
1.PATHINFO 模式 — 重点!!!!!!

2.普通模式

3.REWRITE模式

4.兼容模式

 C 项目目录/应用目录/Lib/Action

一、什么是MVC                 //了解
    M -Model 编写model类 对数据进行操作
    V -View  编写html文件,页面呈现
    C -Controller 编写类文件(UserAction.class.php)
二、ThinkPHP的MVC特点         //了解
三、ThinkPHP的MVC对应的目录   //了解
    M 项目目录/应用目录/Lib/Model
    V 项目目录/应用目录/Tpl
    C 项目目录/应用目录/Lib/Action
四、url访问C                  //了解
五、url的4种访问方式          //重点!
        1.PATHINFO 模式 — 重点!!!!!!
        
        2.普通模式
        
        3.REWRITE模式
        
        4.兼容模式
        

三、ThinkPHP 3 的输出 (重点)

 

一、ThinkPHP 3 的输出      (重点)
    a、通过 echo 等PHP原生的输出方式在页面中输出
    b、通过display方法输出
        想分配变量可以使用assign方法
    c、修改左右定界符
        休要修改配置文件中的配置项
        ‘TMPL_L_DELIM’=>'<{‘, //修改左定界符
        ‘TMPL_R_DELIM’=>’}>’, //修改右定界符

a、通过 echo 等PHP原生的输出方式在页面中输出
b、通过display方法输出
想分配变量可以使用assign方法
c、修改左右定界符
休要修改配置文件中的配置项
‘TMPL_L_DELIM’=>'<{‘, //修改左定界符
‘TMPL_R_DELIM’=>’}>’, //修改右定界符
ThinkPHP 3 的模型使用 (重点)
需要在方法中通过new Model(表名)的形式操作数据库
$m=new Model(‘User’);
$arr=$m->select();
‘DB_TYPE’=>’mysql’, //设置数据库类型
‘DB_HOST’=>’localhost’,//设置主机
‘DB_NAME’=>’thinkphp’,//设置数据库名
‘DB_USER’=>’root’, //设置用户名
‘DB_PWD’=>”, //设置密码
‘DB_PORT’=>’3306’, //设置端口号
‘DB_PREFIX’=>’tp_’, //设置表前缀

1.PATHINFO 模式  
 

二、ThinkPHP 3 的模型使用  (重点)
    需要在方法中通过new Model(’表名’)的形式操作数据库
        $m=new Model(‘User’);
        $arr=$m->select();
    ‘DB_TYPE’=>’mysql’,   //设置数据库类型
    ‘DB_HOST’=>’localhost’,//设置主机
    ‘DB_NAME’=>’thinkphp’,//设置数据库名
    ‘DB_USER’=>’root’,    //设置用户名
    ‘DB_PWD’=>”,        //设置密码
    ‘DB_PORT’=>’3306’,   //设置端口号
    ‘DB_PREFIX’=>’tp_’,  //设置表前缀

四、
‘DB_DSN’=>’mysql://root:@localhost:3306/thinkphp’,//使用DSN方式配置数据库信息

2.普通模式  
 

 

如果两种方式同时存在,以DSN方式为优先

3.REWRITE模块  
 

一、ThinkPHP 3 的输出      (重点)
    a、通过 echo 等PHP原生的输出方式在页面中输出
    b、通过display方法输出
        想分配变量可以使用assign方法
    c、修改左右定界符
        休要修改配置文件中的配置项
        ‘TMPL_L_DELIM’=>'<{‘, //修改左定界符
        ‘TMPL_R_DELIM’=>’}>’, //修改右定界符

还有一种简单实用模型的方式
M() 等效为 new Model();
$m=M(‘User’);
$arr=$m->select();

4.兼容模式  
 

二、ThinkPHP 3 的模型使用  (重点)
    需要在方法中通过new Model(表名)的形式操作数据库
        $m=new Model(‘User’);
        $arr=$m->select();
    ‘DB_TYPE’=>’mysql’,   //设置数据库类型
    ‘DB_HOST’=>’localhost’,//设置主机
    ‘DB_NAME’=>’thinkphp’,//设置数据库名
    ‘DB_USER’=>’root’,    //设置用户名
    ‘DB_PWD’=>”,        //设置密码
    ‘DB_PORT’=>’3306’,   //设置端口号
    ‘DB_PREFIX’=>’tp_’,  //设置表前缀
    也可以使用DSN方法进行配置
  
 ‘DB_DSN’=>’mysql://root:@localhost:3306/thinkphp’,//使用DSN方式配置数据库信息
    如果两种方式同时存在,以DSN方式为优先

使用模型的实例可以对数据进行操作,操作的工作一般就是对数据库进行
增删改查 CURD

 

    还有一种简单实用模型的方式
    M() 等效为 new Model();
    $m=M(‘User’);
    $arr=$m->select();

增 -C Create $m->add()
删 -D Delete $m->delete()
改 -U Update $m->save()
查 -R Read $m->select()

<?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
    public function index(){
        echo “hello world”;
}
    public function add(){
        echo “你好,吴昊<br>”;

    使用模型的实例可以对数据进行操作,操作的工作一般就是对数据库进行
增删改查 CURD
    
    增 -C Create $m->add()
    删 -D Delete $m->delete()
    改 -U Update $m->save()
    查 -R Read   $m->select()

五、ThinkPHP 3 读取数据 (重点)

        echo
‘你好’.$_GET[‘name’].’你的年龄是’.$_GET[‘age’];
    }
}

三、补充                   (了解)
    a、模板可以遍历数组
    <volist name=’data’ id=’vo’>
          
 <{$vo.id}>—-<{$vo.username}>—–<{$vo.sex}><br/>
        </volist>
    b、我们可以开启调试功能中的page_trace
        1.开启调试功能(在入口文件中开启)
            //3.开启调试模式
            define(‘APP_DEBUG’,true);
        2.我们需要设置配置文件,开启页面trace
            ‘SHOW_PAGE_TRACE’=>true,//开启页面Trace也就是页面跟踪

对数据的读取 Read
$m=new Model(‘User’);
$m=M(‘User’);
select
$m->select();//获取所有数据,以数组形式返回
find
$m->find($id);//获取单条数据
getField(字段名)//获取一个具体的字段值
$arr=$m->where(‘id=2’)->getField(‘username’);
ThinkPHP 3 创建数据 (重点)
对数据的添加 Create
$m=new Model(‘User’);
$m=M(‘User’);
$m->字段名=值
$m->add();
返回值是新增的id号
ThinkPHP 3 删除数据 (重点)
$m=M(‘User’);
$m->delete(2); //删除id为2的数据
$m->where(‘id=2’)->delete();
//与上面效果相同,也是删除id为2的数据
返回值是受影响行数
ThinkPHP 3 更新数据 (重点)
$m=M(‘User’);
$data[‘id’]=1;
$data[‘username’]=’ztz2′;
$m->save($data);
返回值是受影响行数

http://localhost/test/index.php/Index/add?name=wuhao

 

六、普通查询方式

http://localhost/test/index.php/Index/add/name/wuhao

一、ThinkPHP 3 的CURD介绍  (了解)
二、ThinkPHP 3 读取数据    (重点)
    对数据的读取 Read
    $m=new Model(‘User’);//<=>$m=M(‘User’);
    select
    $m->select();//获取所有数据,以数组形式返回
    find
    $m->find($id);//获取单条数据,当没有指定$id时默认查出第一个元祖
    getField(字段名)
  
 $arr=$m->where(‘id=2’)->getField(‘username’);//获取一个具体的字段值
如果是传入变量则 where(“id=$id”)
三、ThinkPHP 3 创建数据    (重点)
    对数据的添加 Create
    $m=new Model(‘User’);//<=>$m=M(‘User’);
    $m=M(‘User’);
    $m->字段名=值//如$m->username=’张三’;$m->sex=1;
    $m->add();
    返回值是新增的id号,应该就是主键是什么就返回什么
四、ThinkPHP 3 删除数据    (重点)
    $m=new Model(‘User’);//<=>$m=M(‘User’);
    $m->delete(2);               //删除id为2的数据
    $m->where(‘id=2’)->delete();
//与上面效果相同,也是删除id为2的数据
    返回值是受影响行数
五、ThinkPHP 3 更新数据    (重点)
    $m=new Model(‘User’);//<=>$m=M(‘User’);
    $data[‘id’]=1;
    $data[‘username’]=’ztz2′;
    $m->save($data);             
    返回值是受影响行数

a、字符串
$arr=$m->where(“sex=0 and username=’gege'”)->find();
b、数组
$data[‘sex’]=0;
$data[‘username’]=’gege’;
$arr=$m->where($data)->find();
注意:这种方式默认是and的关系,如果使用or关系,需要添加数组值
$data[‘sex’]=0;
$data[‘username’]=’gege’;
$data[‘_logic’]=’or’;
表达式查询方式
$data[‘id’]=array(‘lt’,6);
$arr=$m->where($data)->select();
EQ 等于
NEQ不等于
GT 大于
EGT大于等于
LT 小于
ELT小于等于
LIKE 模糊查询
$data[‘username’]=array(‘like’,’%ge’);
$arr=$m->where($data)->select();
NOTLIKE
$data[‘username’]=array(‘notlike’,’%ge%’); //notlike中间没有空格
$arr=$m->where($data)->select();

http://localhost/test/index.php/Index/add/name/wuhao/age/18

 

注意:如果一个字段要匹配多个通配符
$data[‘username’]=array(‘like’,array(‘%ge%’,’%2%’,’%五%’),’and’);//如果没有第三个值,默认关系是or关系
$arr=$m->where($data)->select();
BETWEEN
$data[‘id’]=array(‘between’,array(5,7));
$arr=$m->where($data)->select();
//SELECT * FROM `tp_user` WHERE ( (`id` BETWEEN 5 AND 7 ) )
$data[‘id’]=array(‘not between’,array(5,7));//注意,not 和
between中间一定要有空格
$arr=$m->where($data)->select();
IN
$data[‘id’]=array(‘in’,array(4,6,7));
$arr=$m->where($data)->select();
//SELECT * FROM `tp_user` WHERE ( `id` IN (4,6,7) )

 

一、ThinkPHP 3 的CURD管理用户信息  

$data[‘id’]=array(‘not in’,array(4,6,7));
$arr=$m->where($data)->select();
//SELECT * FROM `tp_user` WHERE ( `id` NOT IN (4,6,7) )
区间查询
$data[‘id’]=array(array(‘gt’,4),array(‘lt’,10));//默认关系是 and
的关系
//SELECT * FROM `tp_user` WHERE ( (`id` > 4) AND (`id` <
10) )

‘URL_PATHINFO_DEPR’=>’-‘,  
 //修改URL的分隔符

public function modify(){
$id=$_GET[‘id’];
$m=M(‘User’);
$arr=$m->find($id);
$this->assign(‘data’,$arr);

$data[‘id’]=array(array(‘gt’,4),array(‘lt’,10),’or’)
//关系就是or的关系

‘TMPL_L_DELIM’=>'<{‘,
//修改左定界符

$this->display();

$data[‘name’]=array(array(‘like’,’%2%’),array(‘like’,’%五%’),’gege’,’or’);
统计查询 $count = $m->where(“id=5”)->count();
count //获取个数
max //获取最大数$max = $m->max(‘id’);
min //获取最小数
avg //获取平均数
sum //获取总和
SQL直接查询
a、query 主要数处理读取数据的
成功返回数据的结果集
失败返回boolean false
$m=M();
$result=$m->query(“select * from t_user where id >50”);
var_dump($result);
b、execute 用于更新个写入操作
成功返回影响行数
失败返回boolean false
$m=M();
$result=$m->execute(“insert into t_user(`username`)
values(‘ztz3’)”);
var_dump($result);

‘TMPL_R_DELIM’=>’}>’,
//修改右定界符

}
对应的html代码
<title>modify</title>
<script>
window.onload=function(){
    //alert(“<{$data.sex}>”);
    if(<{$data.sex}>==0){
        document.getElementsByName(‘sex’)[1].checked=’checked’;
        //1不是value值,而是顺序位置,跟数组的下标差不多
    }else{
        document.getElementsByName(‘sex’)[0].checked=’checked’;
    }
}
</script>
</head>
<body>
<form>
姓名:<input type=’text’ name=’username’
value=”<{$data.username}>”/><br/>
性别:男<input type=’radio’ name=’sex’ value=’1’/>
女<input type=’radio’ name=’sex’ value=’0’/><br/>
<input type=’submit’ value=’提交修改’/>
</form>
</table>
</body>
</html>

七、常用连贯操作

 

 

1.where
帮助我们设置查询条件
2.order
对结果进行排序
$arr=$m->order(‘id desc’)->select();
$arr=$m->order(array(‘id’=>’desc’,’sex’=>’asc’))->select();
3.limit
限制结果
limit(2,5)
limit(‘2,5’)
limit(10)//limit(0,10)
4.field
设置查询字段
field(‘username as name,id’)
field(array(‘username’=>’name’,’id’)
field(‘id’,true) //获取除了id以外的所有字段
5.table
6.group
7.having
补充
alias 用于给当前数据表定义别名 字符串
page 用于查询分页(内部会转换成limit) 字符串和数字
join* 用于对查询的join支持 字符串和数组
union* 用于对查询的union支持 字符串、数组和对象
distinct 用于查询的distinct支持 布尔值
lock 用于数据库的锁机制 布尔值
cache 用于查询缓存 支持多个参数(以后在缓存部分再详细描述)
relation 用于关联查询(需要关联模型扩展支持) 字符串
validate 用于数据自动验证 数组
auto 用于数据自动完成 数组
filter 用于数据过滤 字符串
scope* 用于命名范围 字符串、数组

 

一、普通查询方式
    a、字符串
        $arr=$m->where(“sex=0 and
username=’gege'”)->find();//注意where中的单双引号
    b、数组(推荐使用)
        $data[‘sex’]=0;
        $data[‘username’]=’gege’;
        $arr=$m->where($data)->find();                     
//注意此时where中没有引号
        注意:这种方式默认是and的关系,如果使用or关系,需要添加数组值
        $data[‘sex’]=0;
        $data[‘username’]=’gege’;
        $data[‘_logic’]=’or’;
                $arr=$m->where($data)->find();
二、表达式查询方式
        $data[‘id’]=array(‘lt’,6);//LT也可以大写
        $arr=$m->where($data)->select();
               
$arr=$m->where($data)->find();//只能查询出一条<6的
        EQ 等于
        NEQ不等于
        GT 大于
        EGT大于等于
        LT 小于
        ELT小于等于
        LIKE 模糊查询
            $data[‘username’]=array(‘like’,’%ge’);
            $arr=$m->where($data)->select();
        NOTLIKE
            $data[‘username’]=array(‘notlike’,’%ge%’);
//注意notlike中间没有空格
                $arr=$m->where($data)->select();
 
            注意:如果一个字段要匹配多个通配符
          
 $data[‘username’]=array(‘like’,array(‘%ge%’,’%2%’,’%五%’),’and’);//如果没有第三个值,默认关系是or关系
            $arr=$m->where($data)->select();
        BETWEEN
            $data[‘id’]=array(‘between’,array(5,7));
            $arr=$m->where($data)->select();
            //SELECT * FROM `tp_user` WHERE ( (`id` BETWEEN 5 AND
7 ) )
            $data[‘id’]=array(‘not between’,array(5,7));//注意not 和
between中间一定要有空格
            $arr=$m->where($data)->select();
        IN
            $data[‘id’]=array(‘in’,array(4,6,7));
            $arr=$m->where($data)->select();
            //SELECT * FROM `tp_user` WHERE ( `id` IN (4,6,7) )

八、模板的使用 (重点)

            $data[‘id’]=array(‘not in’,array(4,6,7));//注意not 和
in中间一定要有空格
            $arr=$m->where($data)->select();
            //SELECT * FROM `tp_user` WHERE ( `id` NOT IN (4,6,7)
)

a、规则
模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[index].html(.tpl)
更换模板文件的后缀名(修改配置文件)
‘TMPL_TEMPLATE_SUFFIX’=>’.html’,//更改模板文件后缀名
b、修改模板文件目录层次
‘TMPL_FILE_DEPR’=>’_’,//修改模板文件目录层次
c、模板主题
‘DEFAULT_THEME’=>’your’,//设置默认模板主题
需要在TPL下面新建一个your文件夹作为模板主题文件夹
如何动态修改模板主题?
1、在后台准备一个功能,修改config.php文件中的默认模板项
2、通过url传递 t=主题 参数可以修改不同的模板
‘DEFAULT_THEME’=>’your’,//设置默认模板主题
‘TMPL_DETECT_THEME’=>true,//自动侦测模板主题
‘THEME_LIST’=>’your,my’,//支持的模板主题列表

http://localhost/test/index.php/Index/add

三、区间查询
        $data[‘id’]=array(array(‘gt’,4),array(‘lt’,10));//默认关系是
and 的关系
        //SELECT * FROM `tp_user` WHERE ( (`id` > 4) AND
(`id` < 10) )

输出模板内容 (重点)
a、display
1.display中没有参数
$this->display();
2.可以带参数
$this->display(本模块文件夹下的其他模板文件);
$this->display(‘index2’);

public function add(){

        $data[‘id’]=array(array(‘gt’,4),array(‘lt’,10),’or’)
//关系就是or的关系

$this->display(其他文件夹下的模板文件);
$this->display(‘Public:error’);//注意,仅仅需要在Tpl下有Public文件夹以及其中的error.html即可,不需要一定有Public模块

      /*echo
“你好,吴昊<br>”;

      
 $data[‘username’]=array(array(‘like’,’%2%’),array(‘like’,’%五%’),’gege’,’or’);
                //SELECT * FROM
‘tp_user’WHERE((‘username’LIKE’%2%’)OR(‘username’ LIKE
‘%五%’)OR(‘username’=’gege’))
四、统计查询
        count //获取个数
            e.g:$m=M(‘User’);
                $c=$m->count();//SELECT COUNT(*)
              //$data[‘username’]=’gege’;
             
//$c=$m->where($data)->count();查找名字是gege的人的总数  
        max   //获取最大数
        min   //获取最小数
        avg   //获取平均数
        sum   //获取总和
            e.g:$c=$m->max(‘id’);echo $c;
                $c=$m->min(‘id’);echo $c;
                $c=$m->avg(‘id’);echo $c;
                $c=$m->sum(‘id’);echo $c;
五、SQL直接查询(用于很复杂的查询,由于select语句中包含了表名所以可以实例化一个空的Model对象:$m=M();)
    a、query 主要数处理读取数据的
        成功返回数据的结果集
        失败返回boolean false
        $m=M();
        $result=$m->query(“select *  from t_user where id
>5”);//注意引号
                //表名错了返回boolean false
        var_dump($result);
    b、execute 用于更新和写入操作
        成功返回影响行数
        失败返回boolean false
        $m=M();
        $result=$m->execute(“insert into t_user(`username`)
values(‘ztz3’)”);//注意引号
        var_dump($result);

$this->display(其他主题下的 文件夹下的 模板文件);//需要开启主题支持
$this->display(‘my:Index:index’);

      echo
‘你好’.$_GET[‘name’].’你的年龄是’.$_GET[‘age’];*/

一、常用连贯操作
    1.where
        帮助我们设置查询条件
                $arr=$m->where(‘id > 1’)->select();
    2.order    
        对结果进行排序
        $arr=$m->order(‘id desc’)->select();//默认升序asc
      
 $arr=$m->order(array(‘id’=>’desc’,’sex’=>’asc’))->select();
    3.limit    
        限制结果
      
 limit(2,5)<=>limit(‘2,5’)//从第2条数据开始取,取5条(如果有的话)
        limit(10)//limit(0,10)
    4.field    
        设置查询字段
                field(‘username’)
        field(‘username,id’)
        field(‘username as name,id’)
//查询出username和id并且将username换一个别名name
        field(array(‘username’=>’name’,’id’)
        field(‘id’,true) //获取除了id以外的所有字段

$this->display(一个url路径);
$this->display(‘./Public/error.html’);

      $name=’吴昊’;

e.g:  
$arr=$m->limit(2,5)->order(array(‘id’=>’desc’,’sex’=>’asc’))->field(‘id’,true)->select();
    
//前面的条件(where(),order(),limit(),field()等)没有前后顺序之分,但是最后必须是select(),find(),getField()等
    5.table    (在thinkphp手册中可以查到6.12)
    6.group    
    7.having
二、补充  
            alias 用于给当前数据表定义别名 字符串
            page 用于查询分页(内部会转换成limit) 字符串和数字
            join* 用于对查询的join支持 字符串和数组
            union* 用于对查询的union支持 字符串、数组和对象
            distinct 用于查询的distinct支持 布尔值
            lock 用于数据库的锁机制 布尔值
            cache 用于查询缓存
支持多个参数(以后在缓存部分再详细描述)
            relation 用于关联查询(需要关联模型扩展支持) 字符串
            validate 用于数据自动验证 数组
            auto 用于数据自动完成 数组
            filter 用于数据过滤 字符串
            scope* 用于命名范围 字符串、数组

$this->display(‘./Public/error.html’,’utf-8′,’text/xml’);

     
$this->assign(‘myname’,$name);

 

$this->show($content);
3.fetch方法
获得模板文件中的内容,以字符串形式返回
$content=$this->fetch(‘Public:error’);
4.show方法
不需要模板文件,可以直接输出模板内容
$content=$this->fetch(‘Public:error’);
dump($content);
$content=str_replace(‘h1′,’i’,$content);
$this->show($content);
模板中的赋值 (重点)
//$this->assign(‘name’,’赵桐正’);
$this->name=’赵桐正2′;
$this->display();
模板替换 (重点)
__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/
__ROOT__: 会替换成当前网站的地址(不含域名)
__APP__: 会替换成当前项目的URL地址 (不含域名)
__GROUP__:会替换成当前分组的URL地址 (不含域名)
__URL__: 会替换成当前模块的URL地址(不含域名)
__ACTION__:会替换成当前操作的URL地址 (不含域名)
__SELF__: 会替换成当前的页面URL

      //$this->myname=’abc’;

一、模板的使用        (重点)
    a、规则
      
 模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[index].html(.tpl)
        更换模板文件的后缀名(修改配置文件)
      
 ‘TMPL_TEMPLATE_SUFFIX’=>’.tpl’,//更改模板文件后缀名,目前没有改
    b、修改模板文件目录层次
        ‘TMPL_FILE_DEPR’=>’_’,//修改模板文件目录层次
    c、模板主题
        ‘DEFAULT_THEME’=>’your’,//设置默认模板主题
      
 需要在TPL下面新建一个your文件夹作为模板主题文件夹,并且模块同名文件夹要放在模块主题文件夹下面
    如何动态修改模板主题?
        1、在后台准备一个功能,修改config.php文件中的默认模板项
        2、通过url传递 t=主题 参数可以修改不同的模板
            ‘DEFAULT_THEME’=>’your’,//设置默认模板主题
          
 ‘TMPL_DETECT_THEME’=>true,//自动侦测模板主题,在有支持的模板主题列表情况下
            ‘THEME_LIST’=>’your,my’,//支持的模板主题列表
        
二、输出模板内容      (重点)
    a、display
        1.display中没有参数
            $this->display();
        2.可以带参数
            $this->display(本模块文件夹下的其他模板文件);
            $this->display(‘index2’);

更换模板变量规则,修改配置项
‘TMPL_PARSE_STRING’=>array( //添加自己的模板变量规则
‘__CSS__’=>__ROOT__.’/Public/Css’,
‘__JS__’=>__ROOT__.’/Public/Js’,
),

      $this->display();

            $this->display(其他文件夹下的模板文件);
          
 $this->display(‘Public:error’);//注意,仅仅需要在Tpl下有Public文件夹以及其中的error.html即可,不需要一定有Public模块,也就是不一定要有PublicAction.class.php文件

九、变量输出 (重点)

 }

            $this->display(其他主题下的 文件夹下的
模板文件);//需要开启主题支持
            $this->display(‘my:Index:index’);

1.标量输出
2.数组输出
{$name[1]}
{$name[‘k2’]}
{$name.k1}
3.对象输出
{$name:k}
{$name->k}
系统变量
{$Think.get.id}
使用函数
{$name|strtoupper} 生成的编译后文件是 <?php echo (strtoupper($name));
?>
{$name|date=’Y m d H:i:s’,###}
默认值
{$name|default=’这里是默认值’}
运算符

<meta http-equiv=”content-type”
content=”text/html;charset=utf-8″>

3.fetch方法
            获得模板文件中的内容,以字符串形式返回
            $content=$this->fetch(‘Public:error’);
        4.show方法
            不需要模板文件,可以直接输出模板内容甚至直接从数据库中取得
                $content=$this->fetch(‘Public:error’);
              
 dump($content);//类似与var_dump(),但是dump()是thinkphp内置的从而使界面更加友好
              
 $content=str_replace(‘h1′,’i’,$content);//将Public/error.html中的h1用i替换后输出
                $this->show($content);
三、模板中的赋值      (重点)
        //$this->assign(‘name’,’赵桐正’);
        $this->name=’赵桐正2′;
        $this->display();
四、模板替换          (重点)
__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/
__ROOT__: 会替换成当前网站的地址(不含域名) 包括到项目
__APP__: 会替换成当前项目的URL地址 (不含域名)包括到入口文件
__GROUP__:会替换成当前分组的URL地址 (不含域名)
__URL__: 会替换成当前模块的URL地址(不含域名)包括到模块
__ACTION__:会替换成当前操作的URL地址
(不含域名)包括到方法(也就是说与当前页面所处的路径到方法都是相同的)
__SELF__: 会替换成当前的页面URL
        
        更换模板变量规则,修改配置项
        ‘TMPL_PARSE_STRING’=>array(          
//添加自己的模板变量规则
        ‘__CSS__’=>__ROOT__.’/Public/Css’,
        ‘__JS__’=>__ROOT__.’/Public/Js’,
    ),

    • * / % ++ —
      {$name++}
      导入CSS和JS文件
      1、css link
      js scr
      <link rel=’stylesheet’ type=’text/css’ />
      <script src=’__PUBLIC__/Js/test.js’></script>
      2.import
      <import type=’js’ file=’Js.test’ />
      //导入Public文件夹下面的Js目录中的test.js文件,import标签可以省略type属性,默认就是js的
      <import type=’css’ file=’Css.test’ />
      //可以更改默认文件夹 设置basepath属性
      <import type=’js’ file=’Js.my’ basepath=’./Other’/>
      <import type=’css’ file=’Css.my’ basepath=’./Other’/>
      3.load
      //方法可以自动检测导入的文件类型
      <load />
      分支结构
      1、if
      <if condition=’$sex eq “男”‘>
      男人是泥巴做的
      <else />
      女人是水做的
      </if>

一些动态的数据可以通过assign()方法分配给模板显示

 

<if condition=’$age lt 18′>
未成年
<elseif condition=’$age eq 18’/>
青春年少
<else />
成年
</if>
> gt
< lt
== eq
<= elt
>= egt
!= neq
=== heq
!== nheq

<h1>访问了add方法。</h1>

验证码的使用
onclick=’this.src=this.src’//IE浏览器会缓存,URL地址相同的时候会从缓存中取得图片。
下面就是加上一个随机数使得URL变化这样点击验证码就可以换掉了
onclick=’this.src=this.src+”?”+Math.random()’

<switch name=’number’>
<case value=’1′>一个和尚挑水吃</case>
<case value=’2′>两个和尚台水吃</case>
<case value=’3′>三个和尚没水吃</case>
<default/> 这里是默认值
</switch>
循环结构
1.for
<table border=’1′ width=’500′>
<for start=’10’ end=’00’ name=’j’ step=’-2′ comparison=’gt’>
<tr><td>{$j}</td><td>abc</td></tr>
</for>
</table>

<p>你好!{$myname}</p>

页面跳转
$this->redirect(”)

2.volist
<volist name=’list’ id=’v’>
{$v.username}<br/>
</volist>
3.foreach
<foreach name=’list’ item=’v’ key=’k’>
{$k}——-{$v}<br/>
</foreach>
特殊标签
1、比较标签
eq或者 equal 等于 <eq name=’n’ value=’10’>等于10</eq>
neq 或者notequal 不等于 <neq name=’n’
value=’10’>不等于10</neq>
gt 大于
egt 大于等于
lt 小于
elt 小于等于
heq 恒等于
nheq 不恒等于

D:\wamp\www\test\App\Tpl\Index

插入图片,thinkphp/Public/images/login.gif
再给这个图片一个事件,当它点击的时候会去运用sub方法,而sub方法写在<script></script>标签中
<imag src=’__PUBLIC__/images/login.gif’ onclik=’sub()’/>

2.范围标签
in
<in name=’n’
value=’9,10,11,12′>在这些数字里面<else/>不在这些数字的范围内</in>
<notin name=’n’
value=’9,10,11,12′>在这些数字里面<else/>不在这些数字的范围内</in>
between
<notbetween name=’n’
value=’1,10′>{$n}在1-10之间<else/>{$n}不在1到10之间</between>
3.present
标签来判断模板变量是否已经赋值,
<present name=’m’>m有赋值<else/>m没有赋值</present>
4.Empty
empty标签判断模板变量是否为空,
<empty name=’n’>n为空赋值<else/>n有值</empty>
5.Defined
判断常量是否已经定义 <defined name=’a’>已定义</defined>
6.Define
在模板中定义常量 <define name=’a’ value=”123″/>
7.Assing
模板中变量赋值

 

__CSS__相当于__PUBLIC__/Css/
__JS__相当于__PUBLIC__/Js/
需要在配置文件中修改

其他标签使用
1、在模板中直接使用PHP代码
<php> echo “我是赵桐正” </php>
2、建议更改左右定界符
在配置文件中改变
‘TMPL_L_DELIM’=>'<{‘, //修改左定界符
‘TMPL_R_DELIM’=>’}>’, //修改右定界符

需要在方法中通过new
Model(表名)的形式操作数据库

 

十、模板包含

  $m=new Model(‘User’);

一、变量输出 (重点)
        1.标量输出
        $this->assign(‘name’,’高雅’);    
        $this->display();
        2.数组输出
        $arr=array(‘高雅’,’高静’);
        $this->assign(‘name’,$arr);
        $this->display();
            输出页面{$name[1]}
                
                关联数组
                $arr=array(‘k1’=>’高雅’,’k2’=>’高静’);
                  $this->assign(‘name’,$arr);
        $this->display();
        输出页面两种方式{$name[‘k2’]}
                 <=>{$name.k2}
        3.对象输出
                应用第三方类文件需要引进
               
import(‘ORG.My.Test’);//在ThinkPHP/Extend/Library/ORG中新建My文件夹再建立
Test.class.php文件 class Test{public $k=’高雅’;}

<include file=”完整模板文件名” />
<include file=”./Tpl/default/Public/header.html” />
<include file=”read” />
<include file=”Public:header” />
<include file=”blue:User:read” />
<include file=”$tplName” />
<include file=”header”
title=”ThinkPHP框架”keywords=”开源WEB开发框架”/>
在模板中变量用[变量]接受
<include file=’file1,file2′ />
模板渲染
1、自动开启模板渲染 设置配置文件
‘LAYOUT_ON’=>true,//开启模板渲染
准备一个模板渲染页面,在页面中使用{__CONTENT__}接受具体模板页面的内容
如果在摸一个具体模板中不希望使用渲染模板,可以在页首添加{__NOCONTENT__}
2、不开启自动模板渲染可以在每一个具体页面的页首添加
<layout name=’layout’/>
3.使用技巧
在渲染模板文件中也可以使用其他模板文件的内容
<include file=’Public:header’/>
<body>
<p>这里是渲染页面!!!</p>
{__CONTENT__}
</body>
</html>
模板的继承 <block name=””></block>
十一、空模块和空操作
1、空操作
function _empty($name){
$this->show(“$name 不存在 <a >返回首页</a>”);
}
2.空模块
class EmptyAction extends Action{
function index(){
$city=M(‘City’);
$arr=$city->select();
$this->assign(‘list’,$arr);
$name=MODULE_NAME;
$this->display(“City:$name”);
}
}

  $arr=$m->select(); 

        $obj=new Test;
        $this->assign(‘name’,$obj);    
        $this->display();
                {$name:k}//对象下面的成员属性k
                 <=>{$name->k}
二、系统变量(手册8.2)
    
(这个是高雅2)
        $n=$_GET[‘myname’];
        $this->assign(‘name’,$n);    
        $this->display();
                输出页面{$name}
上述等价于直接在输出页面写    {$Think.get.myname}而无需控制器中的代码
三、使用函数
    输出页面{$name|md5}生成的编译后文件(thinkphp2/Home/Runtime/Cache)是
<?php echo (md5($name)); ?>
                {$name|strtoupper} 生成的编译后文件是 <?php echo
(strtoupper($name)); ?>变大写的函数
        
                $this->assign(‘time’,time());    
        $this->display();
                输出页面{$time|date=’Y m d
H:i:s’,###}//三个#是占位符号
生成的编译后文件是 <?php echo (date(‘Y m d H:i:s’,$name)); ?>
四、默认值
当后台控制器文件没有分配name时,也就是没有$this->assign(‘name’,$n);时
        {$name|default=’这里是默认值’}
五、运算符
        + – * / % ++ —
        {$name++}

前置操作和后置操作
1、前置操作: _before_操作名
2、后置操作: _after_操作名
十二、URL规则
1、默认是区分大小写的
2、如果我们不想区分大小写可以改配置文件
‘URL_CASE_INSENSITIVE’=>true,//url不区分大小写
3、如果模块名为 UserGroupAction
那么url找模块就必要要写成

4、如果’URL_CASE_INSENSITIVE’=>false
那么url也可以写为

URL伪静态
‘URL_HTML_SUFFIX’=>’html|shtml|xml’,//限制伪静态的后缀
URL路由
1、启动路由
要在配置文件中开启路由支持
2、使用路由
1.规则表达式配置路由
‘my’=>’Index/index’,//静态地址路由
‘:id/:num’=>’Index/index’,//动态地址路由
‘year/:year/:month/:date’=>’Index/index’,//动态和静态混合地址路由
‘year/:year\d/:month\d/:date\d’=>’Index/index’,//动态和静态混合地址路由
加上 \d代表类型只能是数字
‘my/:id$’=>’Index/index’,// 加上$说明地址中只能是 my/1000
后面不能有其他内容了
2.正则表达式配置路由
‘/^year\/(\d{4})\/(\d{2})\/(\d{2})/’=>’Index/index?year=:1&month=:2&date=:3’
3、注意事项:
1.越复杂的路由越往前面放
‘URL_ROUTE_RULES’=>array(
‘my/:year/:month:/:day’=>’Index/day’,
‘my/:id\d’=>’Index/index’,
‘my/:name’=>’Index/index’,
)
2.可以使用$作为完全匹配的路由规则
‘URL_ROUTE_RULES’=>array(
‘my/:id\d$’=>’Index/index’,
‘my/:name$’=>’Index/index’,
‘my/:year/:month:/:day$’=>’Index/day’,
),
3.用正则匹配的方式
‘URL_ROUTE_RULES’=>array(
‘/^my\/(\d+)$/’=>’Index/index?id=:1’,
‘/^my\/(\w+)$/’=>’Index/index?name=:1’,
‘/^my\/(\d{4})\/(\d{2})\/(\d{2})$/’=>’Index/day?year=:1&month=:2&day=:3’,
),

 ‘DB_TYPE’=>’mysql’,  
//设置数据库类型

 

URL重写
URL生成

 ‘DB_HOST’=>’localhost’,//设置主机

一、导入CSS和JS文件       
    1、传统方法
           css link
       js  src
        <link rel=’stylesheet’ type=’text/css’ />
        <script src=’__PUBLIC__/Js/test.js’></script>
    2.ThinkPHP下的特殊方法
           import
        <import type=’js’ file=’Js.test’ />
//导入Public文件夹下面的Js目录中的test.js文件,import标签可以省略type属性,默认就是js的
        <import type=’css’ file=’Css.test’ />
        //可以更改默认文件夹 设置basepath属性
        <import type=’js’ file=’Js.my’ basepath=’./Other’/>
    3.比import还要简单的ThinkPHP下的特殊方法
          load
        //方法可以自动检测导入的文件类型
        <load />
二、分支结构(ThinkPHP规定的模板中的标签)
    1、if    
        <if condition=’$sex eq “男”‘>
            男人是泥巴做的
            <else />
            女人是水做的
        </if>


 ‘DB_NAME’=>’thinkphp’,//设置数据库名

        <if condition=’$age lt 18′>
            未成年
            <elseif  condition=’$age eq 18’/>
            青春年少
            <else />
            成年
        </if>
        >  gt
        <  lt
        == eq
        <= elt
        >= egt
        != neq
        === heq
        !== nheq

 ‘DB_USER’=>’root’,  
 //设置用户名

        <switch name=’number’><!–注意number前面没有$–>
            <case value=’1′>一个和尚挑水吃</case>
            <case value=’2′>两个和尚台水吃</case>
            <case value=’3′>三个和尚没水吃</case>
            <default/> 这里是默认值
        </switch>

 ‘DB_PWD’=>”,      
 //设置密码

三、循环结构
    1.for
        <table border=’1′ width=’500′>
            <for start=’10’ end=’0′ name=’j’ step=’-2′
comparison=’gt’>
                                   
<!–name默认为i,step默认为1,comparison默认为lt–>
              
 <tr><td>{$j}</td><td>abc</td></tr>
            </for>
        </table>

 ‘DB_PORT’=>’3306’,  
//设置端口号

    2.volist
        一维数组
 后台控制器     $arr=array(‘1′,’2′,’3’);
            $this->assign(‘list’,$arr);    
            $this->display();
前台模板页面               
                <volist name=’list’ id=’vo’>
                        {$vo}<br/>
                </volist>
        二维数组       
后台控制器$arr[0]=array(‘id’=>1,’name’=>’高雅’,’sex’=>’女’);
         
$arr[1]=array(‘id’=>2,’name’=>’高雅2′,’sex’=>’女’);
         
$arr[2]=array(‘id’=>3,’name’=>’高雅3′,’sex’=>’女’);
      $this->assign(‘list’,$arr);    
      $this->display();
前台模板页面
                <volist name=’list’ id=’v’>
            {$v.username}<br/>
        </volist>
    3.foreach
后台控制器$arr=array(‘id’=>’1′,’name’=>’高雅’,’sex’=>’女’);
      $this->assign(‘list’,$arr);    
      $this->display();
前台模板页面
        <foreach name=’list’ item=’v’ key=’k’>
            {$k}——-{$v}<br/>
        </foreach>

 ‘DB_PREFIX’=>’tp_’,
 //设置表前缀

<!–foreach与if嵌套–>
<table border=’1′ width=’500′>
<foreach name=’list’ item=’vo’ key=’k’>

 ‘DB_DSN’=>’mysql://root:@localhost:3306/thinkphp’,//使用DSN方式配置数据库信息
,优先级比传统方式高

<tr>
<td>{$vo.id}</td>
<td>{$vo.username}</td>
<td>{$vo.password}</td>
<td><if condition=”$vo.sex eq 1″>

<else/>

</if></td>
</tr>
</foreach>

图片 1

四、特殊标签(前两个比较重要,常用)
    1、比较标签
            eq或者 equal 等于
            neq 或者notequal 不等于
            gt 大于
            egt 大于等于
            lt 小于
            elt 小于等于
            heq 恒等于
            nheq 不恒等于
                       $this->assign(‘n’,10);    
               $this->display();
                       <eq name=’n’
value=’10’>给的值对于value!<else/>不等于!</eq>

 $user=new Model(‘User’);

    2.范围标签
        in      
                <in name=’n’
value=’9,10,11,12′>在这些数字里面<else/>不在这些数字的范围内</in>
                <notin name=’n’
value=’9,10,11,12′>在这些数字里面<else/>不在这些数字的范围内</notin>
        between
                <notbetween name=’n’
value=’1,10′>{$n}在1-10之间<else/>{$n}不在1到10之间</notbetween>
    3.present
        标签来判断模板变量是否已经赋值,
        <present
name=’m’>m有赋值<else/>m没有赋值</present>
    4.Empty
        empty标签判断模板变量是否为空,
        <empty
name=’n’>n为空赋值<else/>n有值</empty>
    5.Defined
        判断常量是否已经定义
    6.Define
        在模板中定义常量
    7.Assing
        模板中变量赋值
                
        
五、其他标签使用
    1、在模板中直接使用PHP代码
        <php> echo “我是高雅” </php>
    2、建议更改左右定界符
        在配置文件中改变
            ‘TMPL_L_DELIM’=>'<{‘, //修改左定界符
            ‘TMPL_R_DELIM’=>’}>’, //修改右定界符

    $arr=$user->select();

一、模板包含(手册8.7)
        <include file=”完整模板文件名” />
        <include file=”./Tpl/default/Public/header.html” />
        <include file=”read” />//本模块文件夹下的模板
        <include file=”Public:header”
/>//Public文件夹下的模板,但是不一定需要Public控制器
        <include file=”blue:User:read” />//有主题模块的情况下
        <include file=”$tplName” />
        <include file=”header”
title=”ThinkPHP框架”keywords=”开源WEB开发框架”/>
        在模板(即header.html文件)中变量用[变量]接受
        <include file=’file1,file2′ />
二、模板渲染(手册8.24)
    1、自动开启模板渲染 设置配置文件
            ‘LAYOUT_ON’=>true,//开启模板渲染
          
 准备一个模板渲染页面,在页面中使用{__CONTENT__}接受具体模板页面的内容
          
 如果在某一个具体模板中不希望使用渲染模板,可以在页首添加{__NOLAYOUT__}
                       
模板文件里面包含有{__NOLAYOUT__},则即使当前开启布局模板,也不会进行布局模板解析。
    2、不开启自动模板渲染(也就是不配置)可以在每一个具体页面的页首添加
        <layout name=’layout’/>

    var_dump($arr);

三、模板的继承(手册8.25)    
<extend name=’Public:base’ />
<block name=’top’>
<include file=’Public:header’/>
</block>

    $this->display();

<block name=’body’>
    <body>
        <p>这里是渲染页面!!!</p>
        {__CONTENT__}
    </body>
</html>
</block>

 

 

‘SHOW_PAGE_TRACE’=>true,//开启页面Trace

一、空模块和空操作
    1、空操作(手册5.4)
          //_empty方法名是确定的,这样才能自动跳转
        function _empty($name){
            $this->show(“$name 不存在 <a
>返回首页</a>”);
        }
    2、空模块(手册5.5)
       
//EmptyAction是给定的,这样在输入模块名的位置输错了或者直接输入了方法名可以直接跳转Empty控制器
    class EmptyAction extends Action{
        function index(){
            $city=M(‘City’);
            $arr=$city->select();
            $this->assign(‘list’,$arr);
            $name=MODULE_NAME;//获得模块名位置所输入的东西
            $this->display(“City:$name”);
        }
    }

还有一种简单实用模型的方式

二、前置操作和后置操作(手册5.12)
    1、前置操作: _before_操作名
    2、后置操作: _after_操作名(记录方法执行的次数)

 M() 等效为 new Model();

一、URL规则
    1、默认是区分大小写的
    2、如果我们不想区分大小写可以改配置文件
        ‘URL_CASE_INSENSITIVE’=>true,//url不区分大小写    
    3、如果模块名为 UserGroupAction
        那么url找模块就必要要写成
        
  
 4、如果’URL_CASE_INSENSITIVE’=>false//也就是区分大小写的时候,一般将配置改成不区分大小写的
        那么url也可以写为
        
二、URL伪静态
    ‘URL_HTML_SUFFIX’=>’html|shtml|xml’,//限制伪静态的后缀
三、URL路由(重难点)
    1、启动路由
        要在配置文件中开启路由支持
    2、使用路由
        1.规则表达式配置路由
            ‘my’=>’Index/index’,//静态地址路由
            ‘:id/:num’=>’Index/index’,//动态地址路由
          
 ‘year/:year/:month/:date’=>’Index/index’,//动态和静态混合地址路由
          
 ‘year/:year\d/:month\d/:date\d’=>’Index/index’,//动态和静态混合地址路由
            加上 \d代表类型只能是数字(目前ThinkPHP只支持限定为整数)
            ‘my/:id$’=>’Index/index’,// 加上$说明地址中只能是 my/1000
后面不能有其他内容了
        2.正则表达式配置路由
四、URL重写(手册5.9)
五、URL生成(手册5.10)

 $m=M(‘User’);

一、多应用配置技巧
二、使用分组
三、页面跳转
    $this->success(‘查询成功’,U(‘User/test’));
    $this->redirect(‘User/test’,”,5,’页面正在跳’);
四、Ajax技巧

 $arr=$m->select();

 

 


使用模型的实例可以对数据进行操作,操作的工作一般就是对数据库进行
增删改查 CURD

 增 -C Create $m->add()

 删 -D Delete $m->delete()

 改 -U Update $m->save()

 查 -R Read   $m->select()

 

a、模板可以遍历数组

 <volist name=’data’
id=’vo’>

 
 {$vo.id}—-{$vo.username}—–{$vo.sex}<br/>

  </volist>

 b、我们可以开启调试功能中的page_trace

  1.开启调试功能

   define(‘APP_DEBUG’,true);

 
2.我们需要设置配置文件,开启页面trace

 
 ‘SHOW_PAGE_TRACE’=>true,//开启页面Trace

 

读取数据

 对数据的读取 Read

 $m=new Model(‘User’);

 $m=M(‘User’);

 select:$m->select();  
 //获取所有数据,以数组形式返回

 find:$m->find($id);  
 //获取单条数据

 getField(字段名)  
 //获取一个具体的字段值

 $arr=$m->where(‘id=2’)->getField(‘username’);

创建数据   

 对数据的添加 Create

 $m=new Model(‘User’);

 $m=M(‘User’);

 $m->字段名=值

 $m->add();  
 返回值是新增的id号

删除数据   

 $m=M(‘User’);

 $m->delete(2);              
//删除id为2的数据

 $m->where(‘id=2’)->delete();  
 返回值是受影响行数

更新数据

 $m=M(‘User’);

 $data[‘id’]=1;

 $data[‘username’]=’ztz2′;

 $m->save($data);    
 返回值是受影响行数

 

图片 2

 

CURD演示:

图片 3

图片 4

图片 5

图片 6

图片 7图片 8图片 9

图片 10图片 11图片 12图片 13图片 14

==================================================================================================================================================================================================

查询方式:

一、普通查询方式

 a、字符串

  $arr=$m->where(“sex=0 and
username=’gege'”)->find();

 b、数组

  $data[‘sex’]=0;

  $data[‘username’]=’gege’;

 
$arr=$m->where($data)->find();

 
注意:这种方式默认是and的关系,如果使用or关系,需要添加数组值:$data[‘_logic’]=’or’;

二、表达式查询方式

  $data[‘id’]=array(‘lt’,6);  
 $arr=$m->where($data)->select();

  EQ 等于,NEQ不等于, GT
大于,EGT大于等于, LT 小于,ELT小于等于,LIKE 模糊查询

 
 $data[‘username’]=array(‘like’,’%ge’);  
 $arr=$m->where($data)->select();

  NOTLIKE

 
 $data[‘username’]=array(‘notlike’,’%ge%’);  
 $arr=$m->where($data)->select();

 
 注意:如果一个字段要匹配多个通配符

 
 $data[‘username’]=array(‘like’,array(‘%ge%’,’%2%’,’%五%’),’and’);  
 //如果没有第三个值,默认关系是or关系

  BETWEEN

 
 $data[‘id’]=array(‘between’,array(5,7));  
 $arr=$m->where($data)->select();

   //SELECT * FROM `tp_user` WHERE (
(`id` BETWEEN 5 AND 7 ) )

   $data[‘id’]=array(‘not
between’,array(5,7));    $arr=$m->where($data)->select();

  IN

 
 $data[‘id’]=array(‘in’,array(4,6,7));  
 $arr=$m->where($data)->select();

   //SELECT * FROM `tp_user` WHERE (
`id` IN (4,6,7) )

   $data[‘id’]=array(‘not
in’,array(4,6,7));    $arr=$m->where($data)->select();

   //SELECT * FROM `tp_user` WHERE (
`id` NOT IN (4,6,7) )

三、区间查询

 
$data[‘id’]=array(array(‘gt’,4),array(‘lt’,10));    //默认关系是 and
的关系

  //SELECT * FROM `tp_user` WHERE (
(`id` > 4) AND (`id` < 10) )

 
$data[‘id’]=array(array(‘gt’,4),array(‘lt’,10),’or’)    
//关系就是or的关系

 
$data[‘name’]=array(array(‘like’,’%2%’),array(‘like’,’%五%’),’gege’,’or’);

四、统计查询

  count  //获取个数;max  
//获取最大数;min   //获取最小数;avg   //获取平均数;sum  
//获取总和

五、SQL直接查询

 a、query
主要是处理读取数据的:成功返回数据的结果集,失败返回boolean false

  $m=M();

  $result=$m->query(“select *  from
t_user where id >50”);

  var_dump($result);

 b、execute
用于更新个写入操作:成功返回影响行数,失败返回boolean false

  $m=M();

  $result=$m->execute(“insert into
t_user(`username`) values(‘ztz3’)”);

  var_dump($result);

 

‘DB_LIKE_FIELDS’=>’title|content’  
  //查询语句中条件自动变为模糊查询%%

查询方式演示:

图片 15

图片 16

图片 17

图片 18

==================================================================================================================================================================================================

常用连贯操作

 1.where  
  帮助我们设置查询条件 

 2.order     对结果进行排序 

  $arr=$m->order(‘id
desc’)->select();  
 $arr=$m->order(array(‘id’=>’desc’,’sex’=>’asc’))->select();

 3.limit    限制结果 

  limit(2,5)     limit(‘2,5’)  
  limit(10)    //limit(0,10)

 4.field     设置查询字段 

  field(‘username as name,id’)  
 field(array(‘username’=>’name’,’id’)

  field(‘id’,true)    
//获取除了id以外的所有字段

 5.table

 6.group

 7.having

二、补充  

   alias 用于给当前数据表定义别名
字符串

   page
用于查询分页(内部会转换成limit) 字符串和数字

   join* 用于对查询的join支持
字符串和数组

   union* 用于对查询的union支持
字符串、数组和对象

   distinct 用于查询的distinct支持
布尔值

   lock 用于数据库的锁机制 布尔值

   cache 用于查询缓存
支持多个参数(以后在缓存部分再详细描述)

   relation
用于关联查询(需要关联模型扩展支持) 字符串

   validate 用于数据自动验证 数组

   auto 用于数据自动完成 数组

   filter 用于数据过滤 字符串

   scope* 用于命名范围
字符串、数组 

图片 19

图片 20

图片 21

==================================================================================================================================================================================================

视图:

一、模板的使用        

 a、规则

 
模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[index].html(.tpl)

 
更换模板文件的后缀名(修改配置文件)

  ‘TMPL_TEMPLATE_SUFFIX’=>’.html’,
   //更改模板文件后缀名

 b、修改模板文件目录层次

  ‘TMPL_FILE_DEPR’=>’_’,  
 //修改模板文件目录层次

 c、模板主题

  ‘DEFAULT_THEME’=>’your’,  
 //设置默认模板主题

 
需要在TPL下面新建一个your文件夹作为模板主题文件夹

  如何动态修改模板主题?

 
1、在后台准备一个功能,修改config.php文件中的默认模板项

  2、通过url传递 t=主题
参数可以修改不同的模板

 
 ‘DEFAULT_THEME’=>’your’,//设置默认模板主题

 
 ‘TMPL_DETECT_THEME’=>true,//自动侦测模板主题

 
 ‘THEME_LIST’=>’your,my’,//支持的模板主题列表

 
  

二、输出模板内容   

 a、display

 
1.display中没有参数:$this->display();

  2.可以带参数

 
 $this->display(本模块文件夹下的其他模板文件);

   $this->display(‘index2’);

 
 $this->display(其他文件夹下的模板文件);

   $this->display(‘Public:error’);  
 //注意,仅仅需要在Tpl下有Public文件夹以及其中的error.html即可,不需要一定有Public模块

   $this->display(其他主题下的
文件夹下的 模板文件);    //需要开启主题支持

 
 $this->display(‘my:Index:index’);

 
 $this->display(一个URL路径);

 
 $this->display(‘./Public/error.html’);

 
 $this->display(‘./Public/error.html’,’utf-8′,’text/xml’);

   $this->show($content);

  3.fetch方法

 
 获得模板文件中的内容,以字符串形式返回:$content=$this->fetch(‘Public:error’);

  4.show方法

 
 不需要模板文件,可以直接输出模板内容

   
$content=$this->fetch(‘Public:error’);

    dump($content);

   
$content=str_replace(‘h1′,’i’,$content);

    $this->show($content);

三、模板中的赋值      

 
//$this->assign(‘name’,’赵桐正’);

  $this->name=’赵桐正2′;  
  $this->display();

四、模板替换      

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

__ROOT__:
会替换成当前网站的地址(不含域名)

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

__GROUP__:会替换成当前分组的URL地址
(不含域名)

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

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

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

  更换模板变量规则,修改配置项

  ‘TMPL_PARSE_STRING’=>array(      
    //添加自己的模板变量规则

 
‘__CSS__’=>__ROOT__.’/Public/Css’,

 
‘__JS__’=>__ROOT__.’/Public/Js’,

 ),

 

登录框实例:

图片 22

引入扩展类,把ThinkPHP3.1.2_Extend里面的文件放在D:\wamp\www\test\ThinkPHP\Extend文件夹下。

图片 23

图片 24

图片 25

对应的js和css:

D:\wamp\www\test\Public\Css
 
 ·D:\wamp\www\test\Public\Js

图片 26图片 27

==================================================================================================================================================================================================

模板中的变量:

一、变量输出        

  1.标量输出

  2.数组输出

    {$name[1]}    {$name[‘k2’]}  
 {$name.k1}

  3.对象输出

    {$name:k}    {$name->k}

二、系统变量

用法 含义 例子
$Think.server 获取$_SERVER {$Think.server.php_self}
$Think.get 获取$_GET {$Think.get.id}
$Think.post 获取$_POST {$Think.post.name}
$Think.request 获取$_REQUEST {$Think.request.user_id}
$Think.cookie 获取$_COOKIE {$Think.cookie.username}
$Think.session 获取$_SESSION {$Think.session.user_id}
$Think.config 获取系统配置参数 {$Think.config.app_status}
$Think.lang 获取系统语言变量 {$Think.lang.user_type}
$Think.const 获取系统常量 {$Think.const.app_name}或{$Think.APP_NAME}
$Think.env 获取环境变量 {$Think.env.HOSTNAME}
$Think.version 获取框架版本号 {$Think.version}
$Think.now 获取当前时间 {$Think.now}
$Think.template 获取当前模板 {$Think.template}
$Think.ldelim 获取模板左界定符 {$Think.ldelim}
$Think.rdelim 获取模板右界定符 {$Think.rdelim}

三、使用函数

  {$name|strtoupper}
生成的编译后文件是: <?php echo (strtoupper($name)); ?>

  {$name|date=’Y m d
H:i:s’,###}

四、默认值

  {$name|default=’这里是默认值’}

五、运算符

  + – * / % ++ —      
 {$name++}

 

模板中的基本语法:

一、导入CSS和JS文件      

 1、<link rel=’stylesheet’
type=’text/css’ href=’__PUBLIC__/Css/test.css’/>

      <script
src=’__PUBLIC__/Js/test.js’></script>

 2.import

  <import type=’js’ file=’Js.test’
/>    
//导入Public文件夹下面的Js目录中的test.js文件,import标签可以省略type属性,默认就是js的

  <import type=’css’ file=’Css.test’
/>

  <import type=’js’ file=’Js.my’
basepath=’./Other’/>     //可以更改默认文件夹 设置basepath属性

 3.load

  <load
href=’__PUBLIC__/Js/test.js’ />  
  //方法可以自动检测导入的文件类型

二、分支结构

  <if condition=’$age lt
18′>

       未成年

   <elseif  condition=’$age eq
18’/>

       青春年少

   <else />

       成年

  </if>    

  >  gt     <  lt     == eq  
  <= elt     >= egt      != neq     === heq     !== nheq 

  <switch name=’number’>

       <case
value=’1′>一个和尚挑水吃</case>

       <case
value=’2′>两个和尚台水吃</case>

       <case
value=’3′>三个和尚没水吃</case>

       <default/>
这里是默认值

  </switch>

三、循环结构

 1.for

  <table border=’1′
width=’500′>

       <for start=’10’ end=’00’
name=’j’ step=’-2′ comparison=’gt’>

           
<tr><td>{$j}</td><td>abc</td></tr>

       </for>

  </table>

 2.volist

  <volist name=’list’
id=’v’>

   {$v.username}<br/>

  </volist>

 3.foreach

  $user=M(‘User1’);

  $arr=$user->select();

  $this->assign(‘list’,$arr);

  $this->display();

 

 <foreach name=’list’
item=’v’>

      <tr>

         
 <td>{$v.id}</td>

         
 <td>{$v.username}</td>

         
 <td>{$v.sex}</td>

         
 <td>{$v.password}</td>

      </tr>

 </foreach>

四、特殊标签

 1、比较标签

   eq或者 equal 等于   neq 或者notequal
不等于      gt 大于     egt 大于等于     lt 小于     elt 小于等于  
  heq 恒等于   nheq 不恒等于  

 2.范围标签

  in      

    <in name=’n’
value=’9,10,11,12′>在这些数字里面<else/>不在这些数字的范围内</in>

    <notin name=’n’
value=’9,10,11,12′>在这些数字里面<else/>不在这些数字的范围内</in>

  between

    <notbetween name=’n’
value=’1,10′>{$n}在1-10之间<else/>{$n}不在1到10之间</between>

 3.present:标签来判断模板变量是否已经赋值,

  <present
name=’m’>m有赋值<else/>m没有赋值</present>

 4.Empty:empty标签判断模板变量是否为空,

  <empty
name=’n’>n为空赋值<else/>n有值</empty>

 5.Defined: 判断常量是否已经定义

 6.Define:在模板中定义常量

 7.Assing: 模板中变量赋值

五、其他标签使用

 1、在模板中直接使用PHP代码

  <php> echo “我是赵桐正”
</php>

 2、建议更改左右定界符

  在配置文件中改变

   ‘TMPL_L_DELIM’=>'<{‘,
//修改左定界符

   ‘TMPL_R_DELIM’=>’}>’,
//修改右定界符

 

模板的使用技巧:

一、模板包含

  <include file=”完整模板文件名”
/>

  <include
file=”./Tpl/default/Public/header.html” />

  <include file=”read” />

  <include file=”Public:header”
/>

  <include file=”blue:User:read”
/>

  <include file=”$tplName”
/>

  <include file=”header”
title=”ThinkPHP框架”keywords=”开源WEB开发框架”/>

 
在模板中变量用[变量]接受:<include file=’file1,file2′ />

二、模板渲染

 1、自动开启模板渲染 设置配置文件

   ‘LAYOUT_ON’=>true,  
 //开启模板渲染

 
 准备一个模板渲染页面,在页面中使用{__CONTENT__}接受具体模板页面的内容

 
 如果在某一个具体模板中不希望使用渲染模板,可以在页首添加{__NOCONTENT__}

 2、不开启自动模板渲染可以在每一个具体页面的页首添加:<layout
name=’layout’/>

 3.使用技巧:在渲染模板文件中也可以使用其他模板文件的内容

  <include
file=’Public:header’/>

      <body>

         
 <p>这里是渲染页面!!!</p>

           {__CONTENT__}

      </body>

 </html>

三、模板的继承 

==================================================================================================================================================================================================

控制器的模块和操作:

一、空模块和空操作

 1、空操作

  function _empty($name){

   $this->show(“$name 不存在 <a
href=’__APP__/Index/index’>返回首页</a>”);

  }

 2.空模块

 class EmptyAction extends
Action{

      function index(){

           $city=M(‘City’);

         
 $arr=$city->select();

         
 $this->assign(‘list’,$arr);

           $name=MODULE_NAME;

         
 $this->display(“City:$name”);

  }

 }

二、前置操作和后置操作

 1、前置操作: _before_操作名

 2、后置操作: _after_操作名

图片 28图片 29图片 30图片 31图片 32图片 33图片 34图片 35图片 36图片 37

 

图片 38图片 39

==================================================================================================================================================================================================

URL:

‘URL_CASE_INSENSITIVE’=>true,//url不区分大小写

‘URL_HTML_SUFFIX’=>’html|shtml|xml’,//限制伪静态的后缀

一、URL规则
1、默认是区分大小写的
2、如果我们不想区分大小写可以改配置文件
‘URL_CASE_INSENSITIVE’=>true,    //url不区分大小写
3、如果模块名为 UserGroupAction
那么url找模块就必要要写成

4、如果’URL_CASE_INSENSITIVE’=>false
那么url也可以写为

二、URL伪静态
‘URL_HTML_SUFFIX’=>’html|shtml|xml’,    //限制伪静态的后缀
三、URL路由
1、启动路由
要在配置文件中开启路由支持
2、使用路由
1.规则表达式配置路由
‘my’=>’Index/index’,    //静态地址路由
‘:id/:num’=>’Index/index’,    //动态地址路由
‘year/:year/:month/:date’=>’Index/index’,  
 //动态和静态混合地址路由
‘year/:year\d/:month\d/:date\d’=>’Index/index’,  
 //动态和静态混合地址路由 
加上 \d代表类型只能是数字
‘my/:id$’=>’Index/index’,  
 // 加上$说明地址中只能是 my/1000 后面不能有其他内容了
2.正则表达式配置路由
‘/^year\/(\d{4})\/(\d{2})\/(\d{2})/’=>’Index/index?year=:1&month=:2&date=:3’
3、注意事项:
1.越复杂的路由越往前面放
‘URL_ROUTE_RULES’=>array(
‘my/:year/:month:/:day’=>’Index/day’,
‘my/:id\d’=>’Index/index’,
‘my/:name’=>’Index/index’,
)
2.可以使用$作为完全匹配的路由规则
‘URL_ROUTE_RULES’=>array(
‘my/:id\d$’=>’Index/index’,
‘my/:name$’=>’Index/index’,
‘my/:year/:month:/:day$’=>’Index/day’,
),
3.用正则匹配的方式
‘URL_ROUTE_RULES’=>array(
‘/^my\/(\d+)$/’=>’Index/index?id=:1’,
‘/^my\/(\w+)$/’=>’Index/index?name=:1’,
‘/^my\/(\d{4})\/(\d{2})\/(\d{2})$/’=>’Index/day?year=:1&month=:2&day=:3’,
),
四、URL重写
五、URL生成

页面跳转

 $this->success(‘查询成功’,U(‘User/test’));

 $this->redirect(‘User/test’,”,5,’页面正在跳’);

‘APP_GROUP_LIST’ => ‘Home,Admin’,
//项目分组设定

‘DEFAULT_GROUP’  => ‘Home’,
//默认分组

==================================================================================================================================================================================================

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website