thinkphp框架

thinkphp框架={

#######路由规则######

#下面是一个标准的URL访问格式:

http://serverName/index.php/模块/控制器/操作#模块指的是你放控制器的目录名

http://serverName/index.php/Home/Index/index#默认入口文件,也可以简写http://serverName/index.php

#上面这种URL模式就是系统默认的PATHINFO模式

ThinkPHP支持的URL

模式有四种:普通模式、PATHINFO、REWRITE和兼容模式。

1 普通模式:

http://localhost/?m=home&c=index&a=hello&name=thinkphp

#m参数表示模块,c表示控制器,a表示操作(当然,这些参数名是可以配置的),后面的表示其他GET参数。也可以不传

2 PATHINFO模式

http://localhost/index.php/home/index/hello/name/thinkphp/#PATHINFO地址的前三个参数分别表示模块/控制器/操作。后面是参数

也可以用普通模式的参数方式传入参数,例如:

http://localhost/index.php/home/index/hello?name=thinkphp

 

3 REWRITE模式

上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php

 

4 兼容模式(用的少)

兼容模式是用于不支持PATHINFO的特殊环境,URL地址是:

http://localhost/?s=/home/index/hello/name/thinkphp


 

#######视图######

thinkPHP内置了一个编译型模板引擎,也支持原生的PHP模板

#和Smarty不同,ThinkPHP在渲染模板的时候如果不指定模板,则会采用系统默认的定位规则

$this->display();

$this->display('home');#指定html

#其定义规范默认是模块目录下面的 View/控制器名/操作名.html

$this->display("hello");#一定要省略.html,访问指定hello.html

 

重点:

#如果一个连接里没写任何方法,则会直接去找对应的模版文件

http://serverName/index.php/Home/From/add#没定义控制器里的任何方法,则显示From目录里的add.html

 

#在index.php里面写入以下默认目录,则访问和请求都可以省略目录

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

'DEFAULT_GROUP'  => 'Home', //默认分组

 

define("BIND_MODULE","Home");# 绑定Home模块到当前入口文件


 

控制器

public function read($id=0){#$id是参数

http://localhost/app/index.php/Home/Form/read/id/1#会自动传参数进去

}

#html

<FORM method="post" action="__URL__/insert">

标题:<INPUT type="text" name="title"><br/>

内容:<TEXTAREA name="content" rows="5" cols="45"></TEXTAREA><br/>

<INPUT type="submit" value="提交">

</FORM>

#php自动表单类

controller:

namespace Home\Controller;

use Think\Controller;

public function insert()

{

$Form = D('Form');

if ($Form->create()) {

    $result = $Form->add();

if ($result) {

    $this->success('数据添加成功!');

} else {

    $this->error('数据添加错误!');

}

} else {

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

}

}

 

用D()实例化一个模型,一定要要有对应的模型类,没有的话就相当于M()

D("名称");#//如果是表名,不用新建模型 相当于M函数

D("名称");#必须新建一个模型文件,获得模型类,相当于new 模型名;可以直接调方法

#模型名+Model.class.php

D()和M()方法的区别:

M('User')#M()方法,也是调用了Thinkphp内置的 new \Think\Model('User')类;直接进行表操作

D('User')#D方法没有找到定义的模型类,则会自动调用M方法。用于自动验证,自动完成


 

C函数

C函数是读取和设置配置选项的函数

echo C("URL_PATHINFO_DEPR");//获取配置

C("URL_PATHINFO_DEPR",'-');//设置配置


 

I函数

I('get.')//防止XSS共计和sql注入,所做的过滤函数


 

namespace Home\Model;

use Think\Model;

class FormModel extends Model {#提交表单的时候,它会自动执行检测,会自动提交到表里

// 定义自动验证

protected $_validate = array(

array('title','require','标题必须'),

);

// 定义自动完成

protected $_auto = array(

array('create_time','time',1,'function'),

);

}

 

#直接可以这样添加数据;M("bbsinfo")->data($_POST)->add(); 因为$_POST是一维数组


 

window.location ="";#页面跳转到那个地址

#视图显示数据函数

 

#公用html存储位置

View

  Public

    header.html

    footer.html

    success.html

<include file="Public:header"/>#映入到html页面

 

1、volist标签 #循环遍历,name为数组,如果是select,则值为{$v.字段名},如果是find,不能显示单个,find不用循环,直接$find[0]

   <volist name="array" id="v" key="k">

      值:{$v}   序号:{$k}

   </volist>

2.foreach标签 #也是循环标签,如果是select,则值为{$v.字段名},

   <foreach name="key" item="v" key="k">#$k是0,1,2的key值

      值:{$v}  下标:{$k}

   </foreach>

3. <for start="0" end="5">#for循环,这里的$i为0,1,2,3,4

     内容   循环变量:{$i}

   </for>

4. <literal> #不编译,原样输出

     Think标签

   </literal>

5、switch标签#key一般是字段的名称,适用于find 判断

   <switch name="key">

     <case value="值">内容</case>

     <case value="值">内容</case>

     <case value="值">内容</case>

     <default/>内容

   </switch>

6、if标签#if判断,大于等于,一定要用thinkphp的标签

   <if condition="条件">

     内容

   <elseif condition="条件"/>

     内容

   <else/>

     内容

   </if>

# <if condition="$result.title eq '认证失败通知'">

#     内容1

# <else/>

#     内容

# </if>

7、比较标签

   <    lt

   <=   elt

   >    gt

   >=   egt

   ==   eq

   ===    heq

   !=   neq

   !==    nheq

8、运算标签

   + - * / % ++ --

 

# ThinkPHP系统常量

__APP__:返回入口文件地址(链接地址、跳转地址)

__ROOT__:返回根目录地址(引入css、images、library)


 

#html里面的链接路由

   1)超链接地址

     <a href="index.php?c=控制器&a=方法"></a>

     <a href="index.php?c=控制器&a=方法&名=值"></a>

   2)引入样式表

     <link href="public/css/xxx.css">

2、pathinfo

   http://localhost/项目/index.php

   http://localhost/项目/index.php/控制器/方法.html

   http://localhost/项目/index.php/控制器/方法/名/值.html

   1)超链接地址

     <a href="__APP__/控制器/方法.html"></a>

     <a href="__APP__/控制器/方法/名/值.html"></a>

   2)引入样式表

     <link href="__ROOT__/public/css/xxx.css">

 

U()用法:#跳转页面、链接地址

1、控制器

   U("控制器/方法");#他会直接找View目录里对应的html,<a href="{:U('/Form/add')}">5555</a>

#有点类似于:window.location = "__APP__/Index/index";

 

###########################最详细的查询#####################

1、查询多条记录,返回:二维数组

   $result = $model->select();

   $result = $model->field("字段,字段...")->select();

   $result = $model->where()->select();

   $result = $model->order()->select();

   $result = $model->limit()->select();

   $result = $model->field()->where()->order()->limit()->select();

2、添加记录,#返回:受影响的行数、新加记录的主键值

   $result = $model->add(一维关联数组);

   $result = $model->data(一维关联数组)->add();

3、删除记录,#返回:受影响的行数

   $result = $model->where()->delete();

4、查询一条记录,#返回:一维关联数组

   $result = $model->find();

   $result = $model->field()->find();

   $result = $model->where()->find();

   $result = $model->field()->where()->find();

5、修改记录,#返回:受影响的行数

   $result = $model->save(一维关联数组);

   $result = $model->where()->save(一维关联数组);

6、执行select语句#原生,返回:二维数组

   $result = M()->query("select语句");

7、执行insert、update、delete操作,#原生,返回:受影响的行数

   $result = M()->execute("insert|update|delete语句");

8、聚合查询

   $result = $model->count();

   $result = $model->sum("字段");

   $result = $model->avg("字段");

   $result = $model->max("字段");

   $result = $model->min("字段");

 

 #页面重定向,php那边的重定向

1、跳转页面

   $this->redirect("控制器/方法");#如果方法不存在,那只会去找控制器默认的index.html

   $this->redirect("控制器/方法",array(名=>值,名=>值));

2、跳转页面,并提示信息

   $this->redirect("控制器/方法",array(),时间,提示信息);#等待时间,提示信息就是在页面上,不是弹窗

   $this->redirect("控制器/方法",NULL,时间,提示信息);

 

#系统提示信息页面,自带页面

$this->success(提示信息,跳转地址);#

$this->error(提示信息,跳转地址);#

#自定义success页面

1、在View/Public下新建一个success.html

   提示信息:{$message}   跳转地址:{$jumpUrl}

2、修改配置文件,设置success页面

   'TMPL_ACTION_ERROR'  => "Public:success",

   'TMPL_ACTION_SUCCESS'=> "Public:success",

}

 

#在子类的控制器中:构造函数

public function _initialize()

{}

#_initialize类似构造函数,会在__construct函数之后执行

 

###############公共函数类############

Common文件夹的用法:定义公用函数

1、在Common文件夹下新建一个function.php

2、function.php文件名固定(该文件由系统自动加载)

3、控制器、视图都可以直接调用


 

#############Thinkphp自带的图片上传类################

  namespace Home\Controller;

  use Think\Controller;

  use Think\Upload;//导入上传类

 

#单张图片

    public function upload()

    {

     #实例化

      $upload = new Upload();#设置最大上传的大小

      $upload->maxSize = 10000000;#设置允许上传的扩展名

      $upload->exts = array("jpg","gif");#是否创建子目录

      $upload->autoSub = false;#设置保存路径的根目录

      $upload->rootPath = "./";#保存路径

      $upload->savePath = "public/upfile/";#上传文件

      $myFile = $_FILES["myFile"];#name input上传

      $result = $upload->uploadOne($myFile);

      if($result)

      {

        print_r($result['savepath'].$result['savename']);#保存图片地址,保存到数据库

      }

      else

      {

        $message = $upload->getError();//上传的错误信息

        $this->success($message,__APP__."/Upload1/index");

      }

    }

 

#多张图片,多个input上传

    public function upload()

    {

      $upload = new Upload();#设置最大上传的大小 实例化

      $upload->maxSize = 10000000;#设置允许上传的扩展名

      $upload->exts = array("jpg","gif","png");#是否创建子目录

      $upload->autoSub = false;#设置保存路径的根目录

      $upload->rootPath = "./";#保存路径

      $upload->savePath = "public/upfile/";#上传文件

      $result = $upload->upload();

      if($result)

      {

        print_r($result['myFile1']['savepath'].$result['myFile1']['savename']);保#存图片地址,保存到数据库

      }

      else

      {

        $this->success($upload->getError(),__APP__."/Upload2/index");

      }

    }

 

#ThinkPHP缓存:文件缓存、数据缓存(变量缓存)

 

      $t2 = S("t2");#从缓存中获得数据,供下一次缓存使用  //数据缓存(快捷缓存)

      if($t2 == NULL)#如果没有,继续缓存

        {

        $t2 = time();

        S("t2",$t2,3);# 向缓存中添加数据,3秒缓存时间

        }

 

      S("t2",NULL);#清除指定的缓存

#F()方法缓存,仅用于简单数据缓存,并且只能支持文件形式,不支持缓存有效期,没有时间概念

 

#数据库缓存

     $bbsInfo = M("bbsinfo")->cache(true,10)->select();#在10s内不必向数据库查询,直接使用缓存内的数据




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值