菜单

ThinkPHP 3.2 自定义基类 Model

2019年3月19日 - 金沙编程资讯

  那样,我们的 BaseModel 就定义好了,将来项目中的 Model 就不再继续 TP
的 Model 类了,而是继续我们自定义的 BaseModel 了。

其中的create_time字段是为着记录数据插入的年华,大家得以选拔TP的数目自动填充来处理。

代码知识要点:
name=’array’是指要循环的模板变量是array,id=’vo’是指这些数额在模板输出时所使用的称呼

自定义二个 Model

代码知识要点:
模板变量赋值前边的章节已介绍过。那里就不啰嗦了。

<?php  class ArticleModel extends Model{        //使用_map属性(字段映射)将表单元素映射为相应表字段      protected $_map = array(                    "subject"=>"title",          "textEdit"=>"content"      );    }

如此说应该很精晓了,不过别让那样多index给混乱咯,对应U奥德赛L的协会去领略每叁个index的函义,同时注意分寸写

  那样,在大家用 D 方法实例化 TrunkModel 的对象后,使用 add
方法插入数据时,就会先调用 BaseModel 中的 add
方法了,这样我们每张表都有的 create_by 等一名目繁多字段就都会自动获取了。

CUSportageD知识之一 C 创设(create)

控制器:IndexAction,动作:add_article,代码:

复制代码

 

之所以以前我们为think_form数据表在Myapp/Lib/Model目录下树立3个文本FormModel.class.php

能够在控制器中使用 echo $obj->getLastSql(); 查看转换后的 SQL 语句。

  1. <?php
  2. class IndexAction extends Action{
  3.     public function index(){
  4.         $array = array();
  5.         $array[‘name’]    =    ‘thinkphp’;
  6.         $array[’email’]   =    ‘liu21st@gmail.com’;
  7.         $array[‘phone’]   =    ‘12335678’;
  8.         $value  =   ‘hello,ThinkPHP’;
  9.         $this->assign(‘array’,$array);
    1.         $this->assign(‘name’,$value);
    1.         $this->display();
    1.     }
  10. }

  11. ?>

 

运用TP以表单提交数据到库,流程和您所了解的表单提交没有啥样界别,只是TP简化了数量操作的处理进度。
我们在实操中体味一下。
先来看看我们所定义的多寡表form的字段:

<?php    class IndexAction extends Action {        public function archives(){            $obj = M("Archives");  //      $data['writer'] = array("eq","网络营销中心");  //      $data['title'] = array("like","精诚%");          $data['id'] = array("lt","100");          $rows=$obj->where($data)->select();            $count=$obj->where($data)->count();          $tb=C("DB_PREFIX");            $this->assign("list",$rows);          $this->assign("count",$count);          $this->assign("tb",$tb);          $this->display("Article");      }            public function archives2(){            $obj = M("Archives");          $data['id'] = array(array("lt","1034"),array("GT","1029"),"and");          $rows=$obj->where($data)->select();          $this->assign("list",$rows);          $this->display("Article");      }  }

那行字。并活动为您创制好项指标目录。接下来,大家这些连串添砖加瓦。

 1 <?php
 2 namespace Admin\Model;
 3 use Think\Model;
 4 
 5 /**
 6  * 项目中其他 Model 类的基类
 7  * 该类继承自 TP 提供的基类 Model
 8  */
 9 class BaseModel extends Model {
10     
11     /**
12      * 继承基类 Model 的 add 方法
13      * 自动插入 id create_by create_date update_by update_date del_flag
14      */
15     public function add($data='',$options=array(),$replace=false) {
16         
17         $data["id"]          = $this->getUuid();
18         $data["create_by"]   = "";
19         $data["create_date"] = date("Y-m-d H:i:s");
20         $data["update_by"]   = "";
21         $data["update_date"] = date("Y-m-d H:i:s");
22         $data["del_flag"]    = '0';
23         
24         return parent::add($data, $options, $replace);
25     }
26     
27     /**
28      * 获得 未删除 的所有数据
29      * 记录是否被删除通过 del_flag 字段来进行确定
30      */
31     public function select($options=array()) {
32         $map["del_flag"] = 0;
33         $this->where($map);
34         
35         return parent::select($options);
36     }
37     
38     /**
39      * 获取 全部 的所有数据
40      */
41     public function selectAll($options=array()) {
42         return parent::select($options);
43     }
44     
45     /**
46      * 更新数据
47      * 更新数据时,要更新 update_by update_date 两个字段
48      */
49     public function save($data='',$options=array()) {
50         $data["update_by"]   = "";
51         $data["update_date"] = date("Y-m-d H:i:s");
52         
53         return parent::save($data, $options);
54     }
55     
56     /**
57      * 删除也是更新
58      * 设置 删除 标志位即可
59      */
60     public function delete($data='',$options=array()) {
61         $data["del_flag"] = 1;
62         
63         return parent::save($data, $options);
64     }

诚如的话,在表中添加多少都以通过表单来确立,为了更直观地上学CU本田UR-VD中的C,大家接下去建立个表单来进展添加数据的操作。
此前大家已在Myapp/Lib/Model/下创立好FormModel.class.php类—-模型(M)
再就是也在Myapp/Lib/Action/下添加了二个Index应用模块和写下了二个index操作—-控制器(C)
而且在Tpl目录下建立了与之相应的模板目录Index及index.html模板文件 ——-视图(V)
MVC方式的开发已反映了出去。
tdweb曾简单地包含了TP中那三者的涉及,

<?php    class IndexAction extends Action {            public function post(){            $articleObj = D("Article");          $data['title'] = $_POST['subject'];          $data['content'] = $_POST['textEdit'];          $data['add_time'] = date("Y-m-d H:i:s",time());            if($articleObj->data($data)->add()){                $this->success("数据添加成功");          }else{                $this->error("数据添加失败");          }      }  }
  1. <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
  2. <html>
  3. <head>
  4. <title>{$name}</title>
  5. </head>
  6. <body>
  7. 测试输出: {$name}
  8. </body>
  9. </html>

庸俗的供给

3 设置模板变量 {$title} ,扩展add操作方法

2.CURD

TP援救多种UTiguanL访问方式,暗中同意是智能方式,所以大家就那种格局开始展览简要表达。

  自定义一个 Model,Model 中足足重新 TP 提供的 Model 中的
add、save、delete 和 select 方法。

下边主要说说function与callback那多个附加规则。

add 动作代码:

 

 

模型类的与众分化命名还是能智能识别驼峰式的表命名,借使大家有个是近似think_new_table那样的表
能够命名为NewTableModel.class.php。私下认可配置便得以智能识别自动对应think_new_table表,由此不要修改配置。

public function testdb(){        $obj=M("User");      dump($obj);  }

//
模板变量赋值后就必要调用模板文件来输出相关的变量,模板调用通过display方法来促成

  在动用 Java 的开源项目 JeeSite
时,养成了3个倒霉的习惯,习惯给每张表都扩张create_by、create_date、update_by、update_date、remarks 和 del_flag
这么多少个字段。若是每张表都有那多少个字段,那么对每张表进行 insert
时都会对上述的字段实行安装,对每张表实行 update
时都会对内部有些字段展开创新,对每条记下实行 delete 时都其实是对
del_flag 字段展开
置位。重复操作很多,一些操作方法被修改。那么,那一个时候就要自定义3个团结的
Model 来作为项目标 基类 了,那几个 Model 就承受干上面小编说的那么些事情了。

$Form->add(); //add方法会将表单数据实行写入
$this->redirect(); //执行跳转
就那样简单几行代码,便实现了对数码插入的拍卖。

例:使用 select() 输出 tpk_article 表的数据 ( select()
方法用于列出装有符合条件的数据 ) :

复制代码

  定义代码如下:

在Model类定义 $_auto
属性,可以成功多少自动处理功用,用来拍卖暗许值和任何 onclick=”tagshow(event)”>系统写入字段。
专注1:该机动填写大概会覆盖表单提交项目。其目标是为着防备表单违规提交字段。
小心2:要采纳Model类的create方法创设数量对象的时候才会自动进行表单数据处理。

④ 删除数据 delete

复制代码

  use 引入的命名空间是 Admin\Model\BaseModel ,因为大家定义的
BaseModel 的命名空间是 Admin\Model,因为此处的 TrunkModel 和 BaseModel
在八个命名空间下,省去 use 也是能够的。

1 打开Myapp/Lib/Model/FormModel.class.php文件,更改代码为

 

  1. CREATE TABLE `think_form` (
  2.   `id` smallint(4) unsigned NOT NULL auto_increment,
  3.   `title` varchar(255) NOT NULL,
  4.   `content` varchar(255) NOT NULL,
  5.   `create_time` int(11) unsigned NOT NULL,
  6.   `update_time` int(11) unsigned NOT NULL,
  7.   `status` tinyint(1) unsigned NOT NULL,
  8.   `email` varchar(50) NOT NULL,
  9.   PRIMARY KEY  (`id`)

  10. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

1 <?php
2 namespace Admin\Model;
3 use Admin\Model\BaseModel;
4 
5 class TrunkModel extends BaseModel {

2 打开Myapp/Tpl/default/Index/index.html文件,我们修改代码将form写进去

 

复制代码

  继承的 BaseModel 的措施和后续 Model 的措施是相同的,只是使用 use
引入命名空间到日前成效域时的急需修改为大家的命名空间,而不是再去接纳 TP
提供的命名空间。代码如下:

在上面代码中,我们差不离地建了一个form表单,并将标题统一使用1个模板变量{$title}。
action提交到的处理地点是__URL__/add,其中__URL__是三个常量定义,表示方今模块地址,TP模板引擎会自动将那句解释为/index.php/Index/add,常见的沙盘使用的常量有

4.模型属性( Model )

 

继续大家定义的基类

付出进度中,只要简单地定义好与数据表对应的模型类(xxxModel.class.php),就可以进行对数据操作了。
怎么着让那几个模型支撑电动验证,自动填充,自动过滤那些文化,在下边涉及到时会作相应讲解。

create() 方法是贯穿操作、CULacrosseD 操作的集合 (
包涵数据成立、数据印证、表单验证、自动完结等 )。

三成立数据表,并对项目开始展览配置,以便连接到数据库。

 

名词解析:
1  CURD:代表数据库多少个基本操作:创造:create,更新:update,读取:read,删除:delete

借使没有提示错误即为成功。

复制代码

   ThinkPHP 提供了一个 Model 类,供别的的 Model 进行延续。Model 类中是
MVC 中的模型类,它是调用 持久层
的上层类。感觉那样描述难点重重,可是有啥样措施呢?不过,这些 Model
有时不能够满足大家的一对必要,因而大家要求自定义二个 Model
类出来,但是自定义的 Model 同样要一连 TP 提供的 Model
类,而把大家自定义的 Model 类作为大家项目中的 Model
基类。小编怎么感觉俺在说绕口令,等等…作者有点晕。

复制代码

1.模型映射

比方进口文件不是在服务器的根目录,而是在myapp目录下,那么入口文件地点就是Myapp/index.php,此时下面的U卡宴L访问就相应要换到

  1. protected $_auto  =  array(
  2. array(‘password’,’md5′,’ADD’,’function’),
  3. );

 

Temp文件夹:数据缓存目录,存放项目中自动生成的项目运转缓存文件等,以及采取文件措施时的缓存文件等

代码知识要点:
Model类的$_auto属性由八个填充因子组成的数组,填充因子定义格式:

 

至于1.6的利用能够下载火速入门教程,是此连串新手篇的总体版,并且附有示例源码。

第六节 CU帕杰罗D知识之一 C 创建(create)

从这一节初阶,大家即将涉及到数据库操作,TP对数据库的操作特别简便,以下是一些基础知识讲解。

名词解析:
1  CURD:表示数据库四个基本操作:创立:create,更新:update,读取:read,删除:delete

2  模型对象:即数据对象,你项目里每二个Model类文件都会对应着3个数据表(或然视图),模型与数量表存在一种炫耀关系。TP约定了命名要依据一定的科班,如若不适合,则供给基于气象展开额外的应和设置。例如Model类的tableName属性

在首节时,曾略为关联Model类文件命名,现在再回顾一下那部分的始末:
小编们事先在数据库中,已确立了二个think_form数据库表,并且在安排文件config.php中,我们定义了数据表的前缀是think_,
模型类(Model)文件的命名规则是:

不包涵前缀的数据库表表名还要首字母大写+Model.class.php

据此从前我们为think_form数据表在Myapp/Lib/Model目录下建立1个文件FormModel.class.php

模型类的出色命名仍可以够智能识别驼峰式的表命名,如果大家有个是近似think_new_table那样的表
能够命名为NewTableModel.class.php。私下认可配置便足以智能识别自动对应think_new_table表,因此不要修改配置。

支付进程中,只要简单地定义好与数据表对应的模型类(xxxModel.class.php),就能够展开对数据操作了。
哪些让这几个模型支撑电动验证,自动填充,自动过滤这个文化,在底下涉及到时会作相应讲解。

诚如的话,在表中添加多少都以通过表单来树立,为了更直观地上学CUPRADOD中的C,我们接下去建立个表单来拓展添加数据的操作。
以前大家已在Myapp/Lib/Model/下创造好FormModel.class.php类—-模型(M)
再就是也在Myapp/Lib/Action/下添加了二个Index应用模块和写下了2个index操作—-控制器(C)
而且在Tpl目录下树立了与之相应的模板目录Index及index.html模板文件 ——-视图(V)
MVC形式的开发已反映了出去。
tdweb曾简单地归纳了TP中这三者的涉及,

C的效能,便是从M中取得数据到V,

行使TP以表单提交数据到库,流程和你所领会的表单提交没有啥分别,只是TP简化了数量操作的处理进程。
笔者们在实操中体会一下。
先来探望我们所定义的多寡表form的字段:

  1. ‘id’,//自动编号
  2. ‘title’,//标题
  3. ‘content’,//内容
  4. ‘create_time’,//创立时间
  5. ‘update_time’//更新时间
  6. ’email’,//邮箱
  7. ‘status’,//状态

复制代码

其中的create_time字段是为着记录数据插入的时间,大家得以行使TP的数量自动填充来处理。

在Model类定义 $_auto
属性,能够达成数据自动处理效果,用来拍卖暗许值和此外系统写入字段。
瞩目1:该活动填写或者会覆盖表单提交项目。其指标是为着防止表单非法提交字段。
留意2:要动用Model类的create方法创设数量对象的时候才会自行实行表单数据处理。

1 打开Myapp/Lib/Model/FormModel.class.php文件,更改代码为

  1. <?php
  2. class FormModel extends Model {
  3. // 自动填写设置
  4. protected $_auto  =  array(
  5.   array(‘status’,’1′,’ADD’),
  6.         array(‘create_time’,’time’,’ADD’,’function’),
  7. );
  8. }
  9. ?>

复制代码

代码知识要点:
Model类的$_auto属性由多个填充因子组成的数组,填充因子定义格式:

array(填充字段,填充内容,填充条件,附加规则)

填充字段:正是内需展开处理的表单字段,这一个字段并不一定若是数据库表中的字段,对于表单内的相助检查和测试字段比如重复密码和验证码也足以拍卖。
填充条件:ADD | UPDATE | ALL(注意,此是1.5本子表明,1.6已改为1 2
3,后续教程有认证)
当为ADD时,会在疯长多少时自动填充,那是暗许的处理形式
当为UPDATE时,在更新数据的时候会自行填写
当为ALL时,全体景况下都会议及展览开活动填写

叠加规则:叠加规则是本着填充内容而言,表示该内容填充的方法,包罗function,callback,田野(field),string
对此田野同志使用别的字段举行填写和string直接标示字符串作为值举办填空很好精晓。例如地点

  1. array(‘status’,’1′,’ADD’),

复制代码

纵使将状态status字段的值直接以1填充.

上边主要说说function与callback那五个附加规则。

  1. protected $_auto  =  array(
  2. array(‘create_time’,’time’,’ADD’,’function’),
  3. );

复制代码

上面create_time代表了要处理的字段,填充内容是time,附加规则是function使用函数,填充条件是ADD新增时处理,那么整行代码表示对create_time字段在疯长的时候使time函数作为该字段的值举办自动填写。
再看三个function作为附加规则的事例

  1. protected $_auto  =  array(
  2. array(‘password’,’md5′,’ADD’,’function’),
  3. );

复制代码

当使用function作为附加规则时,第2个填充内容就表示了那一个因子是贰个函数名称,该函数的参数便是象征填充字段的值,比如password的值是123456,则上面的代码会先将以此值使用函数md5(‘123456’),那样处理后再插入到数据表中去。
对于function(函数)和callback(回调方法)理论是均等的,只然而3个是表示填充内容所写的是函数名,另四个是象征填充内容是类中的方法名。函数能够是PHP5内置函数或你协调所写的函数。而callback是当前模型类所能调用的三个措施。 关于数据填充方面包车型客车详细资料,请参考官方使用手册
《ThinkPHP数据操作指南》

2 打开Myapp/Tpl/default/Index/index.html文件,大家修改代码将form写进去

  1. <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
  2. <html>
  3. <head>
  4. <title>{$title}</title>
  5. </head>
  6. <body>
  7. <form action=”__URL__/add” method=”post” name=”formname”
    id=”formname”>
  8.     <p>
  9.            <label for=”title”>标题:</label>
    1.            <input name=”title” type=”text” id=”title” />
    1.     </p>
    1.     <p>
    1.            <label for=”email”>邮箱:</label>
    1.           <input name=”email” type=”text” id=”email” />
    1.     </p>
    1.     <p><label
      for=”content”>内容:</label></p>
    1.     <p>
    1.         <textarea name=”content” rows=”5″ cols=”25″
      id=”content” class=”textarea” ></textarea>
    1.     </p>
    1.     <p><input type=”submit” value=”提交”
      /></p>
  10. </form>

  11. </body>

  12. </html>

复制代码

在上边代码中,大家大概地建了1个form表单,并将标题统一使用三个模板变量{$title}。
action提交到的处理地点是__URL__/add,其中__URL__是一个常量定义,表示方今模块地址,TP模板引擎会自行将那句解释为/index.php/Index/add,常见的模板使用的常量有

__ROOT__    网站根目录地址
__APP__         当前项目(入口文件)地址
__URL__         当前模块地址
__ACTION__   当前操作地址
__SELF__       当前 URL 地址

3 设置模板变量 {$title} ,扩充add操作方法

开拓Myapp/Lib/Action/IndexAction.class.php文件,修改代码如下

  1.  
  2. <?php
  3. class IndexAction extends Action{
  4.     public function index() {
  5.        
       $this->assign(‘title’,’添加数据’);//那里设置了模版变量{$title}
  6.            $this->display();
  7.     }
  8.     // 处理表单数据的方法
  9.     function add()  {
    1.           $Form = D(“Form”);
    1.           if($Form->create()) {
    1.                    $Form->add();
    1.                    $this->redirect();
    1.           }else{
    1.                    header(“Content-Type:text/html;
      charset=utf-8”);
    1.                    exit($Form->getError().’ [ <A
      HREF=”javascript:history.back()”>返 回</A> ]’);
    1.          }
    1.     }
  10. }//类定义 end

  11. ?>

复制代码

代码知识要点:
模板变量赋值前边的章节已介绍过。那里就不啰嗦了。

大家来探望add方法的代码。
$Form = D(“Form”);
那边运用了TP的性状单字母函数D,是操作数据库时最常用的TP函数,表示实例化Form对象,
即$Form = new FormModel();
D函数的切实可行代码可以查看ThinkPHP目录内的common/function.php中的片段,
它会自动引入Model类,并判断在此以前如若实例化过那一个Model,就不再实例化,若然该Model不设有,就会抛出更加错误,别的,D能够跨种类访问Model,如今忽略。

$Form->create()
行使Model类的Create方法成立三个Form对象,战败会回去false。

$Form->add(); //add方法会将表单数据开始展览写入
$this->redirect(); //执行跳转
就这么简单几行代码,便成功了对数据插入的处理。
近年来大家能够品尝一下在表单中输入数据开始展览付出试试了。
请先随便插入几条数据,以便下一节大家继续读书CU奥迪Q3D中的Lacrosse

 

 

 

不畏将意况status字段的值直接以1填充.

<?php    class IndexAction extends Action {            public function delete(){            $articleObj = M("Article");          if($articleObj->where("id=".$_GET['id'])->delete()){                $this->success("数据删除成功");          }else{                $this->error("数据删除失败");          }      }  }

代码知识要点(摘自手册:ThinkPHP模板指南,此后的文化要点均出自TP官方手册,不再注明)

$Form->create()
选拔Model类的Create方法创立多少个Form对象,退步会重回false。

<!DOCTYPE html>  <html>  <body>        <form method="post" action="__URL__/add">            <input type="text" name="title" placeholder="标题"><br><br>          <textarea name="content" id="content" placeholder="内容"></textarea><br><br>          <input type="submit" name="submit" value="提交">        </form>    </body>  </html>

[教程] 一步一步遵纪守法学习TP六(新手篇/1.6版)

在上一节实际操作中,大家已成功插入了多条测试的数据,可是很鲜明,大家发现里头的邮箱地址一项不合乎格式也得以付出,这自然不是我们所期望看到的,这时大家能够运用TP的数额自动验证功能去控制用户输入。
而之前已交付的数目,也能够透过编写制定数据将原本错误格式的邮箱地址重新改变为科学的email,那么些处理让大家都放在下一节的多寡编辑中一起读书。

以前,先来探望TP最宗旨的数目查询。

8 节数据查询(CU大切诺基D之Tucson)
TP的查询很人性化地分为单数据重返或多数据重回,视乎本人项目经过中的实际必要,依照这一连串教程的读书习惯,大家仍是在实操中去询问,以代码来上学,一起入手吧。

1
先将Myapp/Lib/Action/indexAction.class.php代码稍作修改,以造福更直观地翻看查询结果。

  1.     public function index()
  2.     {
  3.         $Form = D(“Form”);
  4.         $data   =   $Form->order(‘id desc’)->select();
  5.         $this->assign(‘data’,$data);
  6.         $this->assign(‘title’,’添加数据’);
  7.         $this->display();
  8.     }

复制代码

2
在第一节时,大家询问过模板变量的巡回输出,今后使用那知识点将相应的模板文件Myapp/Tpl/default/Index/index.html修改如下

  1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
    “;
  2. <html xmlns=”;
  3. <head>
  4. <meta http-equiv=”Content-Type” content=”text/html;
    charset=utf-8″ />
  5. <title>{$title}</title>
  6. <style type=”text/css”>
  7. h3{color:green;}
  8. .box{width:600px;margin:10px auto;border:1px dashed
    #e8e8e8;padding:5px;}
  9. .submit{height:2em;padding:0 5px;cursor:pointer;}

  10. </style>

  11. </head>

  12. <body>

  13. <form action=”__URL__/add” method=”post” name=”formname”
    id=”formname” class=”box”>

    1.     <p><label
      for=”title”>标题:</label><input name=”title”
      type=”text” id=”title” /></p>
    1.     <p><label
      for=”email”>邮箱:</label><input name=”email”
      type=”text” id=”email” /></p>
    1.     <p><label
      for=”content”>内容:</label></p>
  14. <p>

    1.         <textarea name=”content” rows=”6″ cols=”50″
      id=”content” class=”textarea” ></textarea>
    1.     </p>
  15. <p><input name=”submit” type=”submit” value=” 提交 ”
    class=”submit” /></p>

  16. </form>

  17. {//Form表数据循环输出}

  18. <iterate name=”data” id=”vo”>

  19. <div class=”box”>

  20. <h3>NO.{$vo.id}:{$vo.title}</h3>

  21. <p>———–由 {$vo.email} 发表于:
    <em>{$vo.create_time|date=’Y-m-d’,###}</em></p>

  22. <p>内容:</p>

  23. <p>{$vo.content}</p>

  24. </div>

  25. </iterate>

  26. </body>

  27. </html>

复制代码

在浏览器中输入

 

那时候我们若是每输入一条数据消息,就会根据id倒序的格局浮以后模板上。

—恢复生机内容结束—

此框架的雄强超出我的不测,它的RO劲客真是强,还有内置的CRUD,比JAVA的框架更智能。

为了防止前台表单成分与数据库字段名相同而使数据库字段暴光,能够修改前台表单成分的
name,同时在 Model 中行使 _map 属性。代码:

目前就是那样,前面会再根据需求越来越丰硕和教师。

__ROOT__    网站根目录地址
__APP__         当前项目(入口文件)地址
__URL__         当前模块地址
__ACTION__   当前操作地址
__SELF__       当前 URL 地址

例:添加数据

复制代码

填充字段:便是索要开始展览拍卖的表单字段,这些字段并不一定若是数据库表中的字段,对于表单内的鼎力相助检查和测试字段比如重复密码和验证码也得以处理。
填充条件:ADD | UPDATE | ALL(注意,此是1.5版本表达,1.6已改为1 2
3,后续教程有表达)
当为ADD时,会在增加产量多少时自动填充,这是暗中同意的处理情势
当为UPDATE时,在创新数据的时候会活动填写
当为ALL时,全体意况下都会开始展览机动填写

 

Cache文件夹:项目自动生成的沙盘缓存会冒出在此地

福利回想性的求学转发了部分以下文章

浏览器输出:

由在此之前边的求学,大家已大概地通晓了选拔模块中的操作与模板如何对应。
而这一节将简单讲解如何通过U卡宴L来访问操作。由于大家要渐进,所以先只介绍上边章节要用到的知识,要想深远学习还请参见官方手册《UCRUISERL设计和SEO协助》

大家来探望add方法的代码。
$Form = D(“Form”);
此间运用了TP的特色单字母函数D,是操作数据库时最常用的TP函数,表示实例化Form对象,
即$Form = new FormModel();
D函数的实际代码能够查看ThinkPHP目录内的common/function.php中的片段,
它会活动引入Model类,并认清从前若是实例化过那几个Model,就不再实例化,若然该Model不设有,就会抛出至极错误,别的,D能够跨系列访问Model,近年来忽略。

3.create 方法


当使用function作为附加规则时,第二个填充内容就象征了这么些因子是贰个函数名称,该函数的参数正是代表填充字段的值,比如password的值是123456,则上面包车型客车代码会先将那些值使用函数md5(‘123456’),那样处理后再插入到数据表中去。
对于function(函数)和callback(回调方法)理论是一样的,只然则三个是代表填充内容所写的是函数名,另二个是意味着填充内容是类中的方法名。函数能够是PHP5内置函数或你协调所写的函数。而callback是近来模型类所能调用的2个主意。 至于数据填充方面的详细资料,请参见官方使用手册
《ThinkPHP数据操作指南》

<?php  class IndexAction extends Action {        public function add(){            //表单处理          $articleObj = M('Article');          $articleObj->create();          $articleObj->add_time = date("Y-m-d H:i:s",time());          if($articleObj->add()){                $this->success("数据添加成功");          }else{                $this->error("数据添加失败");          }  }

解释一下上边文字中所译的ULANDL结构,
为啥appname项目名称笔者将它译成了入口文件地方:经常状态下,大家的进口文件index.php都是坐落根目录中,这时项目名称就会被进口文件index.php所替代。在前几节里,大家已精晓,一个Action文件便是2个应用模块,而利用模块中的每一种方法(function)便是3个具体操作。由此,假使要拜访大家实例中的Index模块下的index操作。地址应该是

  1. ‘id’,//自动编号
  2. ‘title’,//标题
  3. ‘content’,//内容
  4. ‘create_time’,//创造时间
  5. ‘update_time’//更新时间
  6. ’email’,//邮箱
  7. ‘status’,//状态
<?php    class IndexAction extends Action {            public function post(){            $articleObj = D("Article");          $data['title'] = $_POST['subject'];          $data['content'] = $_POST['textEdit'];          $data['add_time'] = date("Y-m-d H:i:s",time());          if($articleObj->add($data)){                $this->success("数据添加成功");          }else{                $this->error("数据添加失败");          }      }  }

开辟浏览器,输入

  1. <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0
    Transitional//EN”>
  2. <html>
  3. <head>
  4. <title>{$title}</title>
  5. </head>
  6. <body>
  7. <form action=”__URL__/add” method=”post” name=”formname”
    id=”formname”>
  8.     <p>
  9.            <label for=”title”>标题:</label>
  10.            <input name=”title” type=”text” id=”title” />
  11.     </p>
  12.     <p>
  13.            <label for=”email”>邮箱:</label>
  14.           <input name=”email” type=”text” id=”email” />
  15.     </p>
  16.     <p><label
    for=”content”>内容:</label></p>
  17.     <p>
  18.         <textarea name=”content” rows=”5″ cols=”25″
    id=”content” ></textarea>
  19.     </p>
  20.     <p><input type=”submit” value=”提交” /></p>
  21. </form>
    </body>
    </html>

ArticleModel.class.php:

  1. $array = array();
  2. $array[‘name’]    =    ‘thinkphp’;
  3. $array[’email’]   =    ‘liu21st@gmail.com’;
  4. $array[‘phone’]   =    ‘12335678’;
  5. $this->assign($array);

叠加规则:叠加规则是指向填充内容而言,表示该内容填充的措施,包涵function,callback,田野先生,string
对于田野(field)使用别的字段实行填写和string间接标示字符串作为值举办填空很好驾驭。例如地点

<?php  class IndexAction extends Action {        Public function add_article(){            $this->display();      }  }

在应当模块中,借使有个别操作是亟需页面突显的,只要对应在Myapp/Tpl/default/里建立贰个文件夹,文件夹以应用模块的名目来定名,然后在那些文件夹下,建立一个以这些function名称来定名的html文件,就足以在这么些艺术中动用$this->display()方法来平昔调用该模板。(当然也足以调用其它模块下的其余模板或显式钦命模板文件地点和称号,由于是规行矩步式的学习,就让大家先忽略吧)


<?php  class ArticleModel extends Model{            public function article(){                $rows=$this->where("area='{$this->checkUserArea()}'")->select();          return $rows;      }        protected function checkUserArea(){                return "北京";          }

然后大家开辟Myapp/Lib/Action/IndexAction.class.php文件,将里面包车型客车内容删掉。改成上面那样:

  1. protected $_auto  =  array(
  2. array(‘create_time’,’time’,’ADD’,’function’),
  3. );

附:数据表 tpk_article 的表结构为:

  1. <?php
  2. class IndexAction extends Action{
  3.     public function index(){
  4.         $form = D(‘Form’)->findall();
  5.         dump ( $form );
  6.         exit;
  7.     }
  8. }
  9. ?>

上面create_time代表了要拍卖的字段,填充内容是time,附加规则是function使用函数,填充条件是ADD新增时处理,那么整行代码表示对create_time字段在疯长的时候使time函数作为该字段的值实行活动填写。
再看一个function作为附加规则的例证

//TP 恶补ing... 

// 下边包车型客车写法是如出一辙的

  1. <?php
  2. class IndexAction extends Action{
  3.     public function index() {
  4.        
       $this->assign(‘title’,’添加数据’);//那里安装了模版变量{$title}
  5.            $this->display();
  6.     }
  7.     // 处理表单数据的形式
  8.     function add()  {
  9.           $Form = D(“Form”);
  10.           if($Form->create()) {
  11.                    $Form->add();
  12.                    $this->redirect();
  13.           }else{
  14.                    header(“Content-Type:text/html;
    charset=utf-8”);
  15.                    exit($Form->getError().’ [ <A >返
    回</A> ]’);
  16.          }
  17.     }
  18. }//类定义 end
  19. ?>

概念:数据对象 ——
数据字段与数据表之间的涉及,数据会被映射为类成员,再与数量表映射,最终实现多少的插入或更新。

.htaccess.rar (248 Bytes)

在第四节时,曾略为关联Model类文件命名,以后再回想一下那有的的内容:
我们在此以前在数据库中,已确立了叁个think_form数据库表,并且在陈设文件config.php中,大家定义了数据表的前缀是think_,
模型类(Model)文件的命名规则是:

图片 1

您能够领会为
http:// 服务器地址 / 入口文件地方 / 应用模块名称 /具体操作名称/ GET变量参数

最近比较绕有趣味地上学PHP,看完了有个别基础语法、学会了动用SMAWranglerY模版,继而看了ThinkPHP框架,

例:

5 在www根目录下,成立3个PHP文件,起名index.php,这正是进口文件

开拓Myapp/Lib/Action/IndexAction.class.php文件,修改代码如下

M(“User”) 就是模型映射,M 函数等于 new Model() ,Model
类是模型的基类,也是数据库操作的基类, “User”
是此类的1个成员属性,表示模型名称,模型名称与数据库中的数据表进行映射。注意:User
“U” 要大写,数据库中此时理应留存一张 user
表,系统会根据铺排文件中的设置给 user 表添加前缀,例如
tpk_user。要是不必要为表添加前缀,将模型名称首字母改为小写,例如
M(“user”)。

复制代码

复制代码

IndexAction.class.php:

名词解释:

2  模型对象:即数据对象,你项目里每2个Model类文件都会对应着二个数据表(只怕视图),模型与数量表存在一种炫耀关系。TP约定了命名要服从一定的行业内部,若是不相符,则需求基于气象展开额外的呼应设置。例如Model类的tableName属性

 

开辟Myapp/Lib/Action/IndexAction.class.php文件,我们看看个中的底蕴代码

相关文章

发表评论

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

网站地图xml地图