自定义基类,ThinkPHP学习笔记1

by admin on 2019年2月27日

   ThinkPHP 提供了一个 Model 类,供其余的 Model 举行持续。Model 类中是
MVC 中的模型类,它是调用 持久层
的上层类。感觉那样描述难点重重,不过有如何办法啊?可是,那个 Model
有时不或许满意大家的一部分供给,由此我们要求自定义2个 Model
类出来,不过自定义的 Model 同样要继续 TP 提供的 Model
类,而把大家自定义的 Model 类作为大家项目中的 Model
基类。作者怎么觉得自笔者在说绕口令,等等…作者有点晕。

近期相比较绕有趣味地上学PHP,看完了部分基础语法、学会了运用SMA奥迪Q7Y模版,继而看了ThinkPHP框架,

//TP 恶补ing... 

—复苏内容起先—

 

此框架的无敌超出自个儿的奇怪,它的ROOdyssey真是强,还有内置的CRUD,比JAVA的框架更智能。

① 、定义数据表模型

前言
TP的手册杰出多,其实无须再出那样的贴子,论技术,作者也是菜鸟2个,同时也在求学在那之中。
看样子论坛上多了广大新对象,不少在抱怨手册看不懂,那自身就姑且进行试探,尝试与新情人们更简便地、手把手地进入TP的利用中去。讲解进度中有错的地方,我们协助指正。

无聊的急需

惠及回想性的读书转载了有的之下小说

1.模子映射

其一种类,初始定下的指标为,从零开头,以TP示例大旨中的Form为例举办教学,以实行为主,理论为辅,
将TP的最焦点内容逛2遍,至少让大家一起学会如何进展最简易的对数码实行查、增、改、删操作并出口到模板。

  在利用 Java 的开源项目 JeeSite
时,养成了二个糟糕的习惯,习惯给每张表都增多
create_by、create_date、update_by、update_date、remarks 和 del_flag
这么多少个字段。如若每张表都有那多少个字段,那么对每张表举办 insert
时都会对以上的字段进行安装,对每张表进行 update
时都会对中间有的字段实行翻新,对每条记下进行 delete 时都其实是对
del_flag 字段进展
置位。重复操作很多,一些操作方法被涂改。那么,那么些时候就要自定义3个和好的
Model 来作为项指标 基类 了,这么些 Model 就承受干上边笔者说的那几个事情了。

CURubiconD知识之一 C 创制(create)

要测试数据库是或不是健康连接,最直白的办法正是在近年来控制器中实例化数据表,然后使用
dump 函数输出,查看数据库的链接状态。代码:

是因为大家说的是渐进,所以自个儿用步骤式来证实,只要一步一步跟着做,相信聪明的你在利用进度中就会分晓TP的选取了。

 

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

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

留神:以下的步调,仅仅是TP灵活的安插情势之中一种,实际开发中能够依照自身的情状去重新设定。
有关怎么那么做,大家会在结尾再作总计,我以为先实际操作然后再开始展览表明比较简单掌握。以下不再重复解释。

自定义3个 Model

2  模型对象:即数据对象,你项目里每三个Model类文件都会对应着一个数据表(恐怕视图),模型与数量表存在一种炫耀关系。TP约定了命名要遵循一定的行业内部,就算不相符,则须要基于气象进行额外的呼应设置。例如Model类的tableName属性

此刻浏览器输出:

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

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

在第一节时,曾略为涉嫌Model类文件命名,未来再回想一下那部分的情节:
咱俩后面在数据库中,已创立了贰个think_form数据库表,并且在布局文件config.php中,大家定义了数据表的前缀是think_,
模型类(Model)文件的命名规则是:

bf88必发唯一官网 1bf88必发唯一官网 2

一  赶快初阶贰个门类

  定义代码如下:

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

object(Model)#5 (20) {    ["_extModel:private"] => NULL    ["db:protected"] => object(DbMysql)#7 (18) {      ["dbType:protected"] => string(5) "MYSQL"      ["autoFree:protected"] => bool(false)      ["model:protected"] => string(7) "_think_"      ["pconnect:protected"] => bool(false)      ["queryStr:protected"] => string(28) "SHOW COLUMNS FROM `tpk_user`"      ["modelSql:protected"] => array(1) {        ["user"] => string(28) "SHOW COLUMNS FROM `tpk_user`"      }      ["lastInsID:protected"] => NULL      ["numRows:protected"] => int(2)      ["numCols:protected"] => int(0)      ["transTimes:protected"] => int(0)      ["error:protected"] => string(0) ""      ["linkID:protected"] => array(1) {        [0] => resource(27) of type (mysql link)      }      ["_linkID:protected"] => resource(27) of type (mysql link)      ["queryID:protected"] => resource(28) of type (mysql result)      ["connected:protected"] => bool(true)      ["comparison:protected"] => array(10) {        ["eq"] => string(1) "="        ["neq"] => string(2) "<>"        ["gt"] => string(1) ">"        ["egt"] => string(2) ">="        ["lt"] => string(1) "<"        ["elt"] => string(2) "<="        ["notlike"] => string(8) "NOT LIKE"        ["like"] => string(4) "LIKE"        ["in"] => string(2) "IN"        ["notin"] => string(6) "NOT IN"      }      ["selectSql:protected"] => string(96) "SELECT%DISTINCT% %FIELD% FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING%%ORDER%%LIMIT% %UNION%%COMMENT%"      ["bind:protected"] => array(0) {      }    }    ["pk:protected"] => string(2) "id"    ["tablePrefix:protected"] => string(4) "tpk_"    ["name:protected"] => string(4) "user"    ["dbName:protected"] => string(0) ""    ["connection:protected"] => string(0) ""    ["tableName:protected"] => string(0) ""    ["trueTableName:protected"] => string(8) "tpk_user"    ["error:protected"] => string(0) ""    ["fields:protected"] => array(5) {      [0] => string(2) "id"      [1] => string(8) "username"      ["_autoinc"] => bool(true)      ["_pk"] => string(2) "id"      ["_type"] => array(2) {        ["id"] => string(7) "int(11)"        ["username"] => string(11) "varchar(20)"      }    }    ["data:protected"] => array(0) {    }    ["options:protected"] => array(0) {    }    ["_validate:protected"] => array(0) {    }    ["_auto:protected"] => array(0) {    }    ["_map:protected"] => array(0) {    }    ["_scope:protected"] => array(0) {    }    ["autoCheckFields:protected"] => bool(true)    ["patchValidate:protected"] => bool(false)    ["methods:protected"] => array(13) {      [0] => string(5) "table"      [1] => string(5) "order"      [2] => string(5) "alias"      [3] => string(6) "having"      [4] => string(5) "group"      [5] => string(4) "lock"      [6] => string(8) "distinct"      [7] => string(4) "auto"      [8] => string(6) "filter"      [9] => string(8) "validate"      [10] => string(6) "result"      [11] => string(4) "bind"      [12] => string(5) "token"    }  }

名词解释:

 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     }

所以从前大家为think_form数据表在Myapp/Lib/Model目录下树立二个文本FormModel.class.php

品类:你要花费的系统,称之为项目。

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

模型类的非正规命名还能智能识别驼峰式的表命名,假使我们有个是相近think_new_table那样的表
能够命名为NewTableModel.class.php。暗中认可配置便足以智能识别自动对应think_new_table表,由此不必修改配置。

设若没有提示错误即为成功。

进口文件:你能够领会为这么些项目标绝无仅有一道门,未来全部的操作都会通过那道门去履行拍卖。
毋庸理会什么看头,你还是能先把它作为是index.php正是进口文件

 

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

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

TP: ThinkPHP框架的简称

延续大家定义的基类

貌似的话,在表中添加多少都以透过表单来树立,为了更直观地上学CUXC60D中的C,咱们接下去建立个表单来展开添加数据的操作。
前边我们已在Myapp/Lib/Model/下创立好FormModel.class.php类—-模型(M)
还要也在Myapp/Lib/Action/下添加了三个Index应用模块和写下了1个index操作—-控制器(C)
与此同时在Tpl目录下创建了与之对应的沙盘目录Index及index.html模板文件 ——-视图(V)
自定义基类,ThinkPHP学习笔记1。MVC方式的费用已显示了出去。
tdweb曾不难地回顾了TP中那三者的涉及,

 

1 下载TP1.5正式版

  继承的 BaseModel 的法子和继续 Model 的法子是相同的,只是利用 use
引入命名空间到眼下坚守域时的内需修改为大家的命名空间,而不是再去行使 TP
提供的命名空间。代码如下:

C的机能,正是从M中取得数据到V,

2.自定义模型

2 拟好你的项目名称,大家那里以 Myapp 为项目名称

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

选择TP以表单提交数据到库,流程和你所通晓的表单提交没有何分别,只是TP简化了数据操作的处理进程。
咱俩在实操中体味一下。
先来探视大家所定义的多少表form的字段:

D
函数用于飞速实例化自定义模型,能够进行理并答复杂的数据库操作,比如数据印证、数据缓存、数据加工等。自定义模型存放在
Lib/Model 目录下,例如为多少表 tpk_article
数据表建模映射,则须要创建 ArticleModel.class.php,然后利用 D
函数实行实例化,ArticleModel 模型将与 tpk_article 表进行映射。

3 在www根目录下,将TP框架全数文件全体复制过去,文件夹名称是ThinkPHP

  use 引入的命名空间是 Admin\Model\BaseModel ,因为我们定义的
BaseModel 的命名空间是 Admin\Model,因为那边的 TrunkModel 和 BaseModel
在一个命名空间下,省去 use 也是足以的。

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

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

4 与ThinkPHP同级新建3个文件夹,起名为 Myapp,也便是项目名称

 

复制代码

class IndexAction extends Action {          public function article(){        $obj=D("Article");      $rows=$obj->select();                  dump($rows);     }  }

5 在www根目录下,创立三个PHP文件,起名index.php,那正是进口文件

  那样,在我们用 D 方法实例化 TrunkModel 的指标后,使用 add
方法插入数据时,就会先调用 BaseModel 中的 add
方法了,那样大家每张表都某个 create_by 等一一日千里字段就都会自动获取了。

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

浏览器输出:

入口文件index.php代码:

在Model类定义 $_auto
属性,能够做到数据自动处理功效,用来拍卖默许值和其他 onclick=”tagshow(event)”>系统写入字段。
注意1:该机动填写或然会覆盖表单提交项目。其指标是为了防备表单不合法提交字段。
留神2:要接纳Model类的create方法创造数量对象的时候才会自动实行表单数据处理。

bf88必发唯一官网 3bf88必发唯一官网 4

  1. <?php
  2.     // 定义ThinkPHP路径
  3.     define(‘THINK_PATH’,’./ThinkPHP’);
  4.     // 定义项目名称
  5.     define(‘APP_NAME’,’Myapp’);
  6.     // 定义项目路线
  7.     define(‘APP_PATH’,’./Myapp’);
  8.     // 加载入口文件
  9.     require(THINK_PATH.’/ThinkPHP.php’);
    1.     // 实例化那些类型
    1.     $App = new App();
    1.     // 执行开始化
    1.     $App->run();
  10. ?>

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

array(6) {    [0] => array(7) {      ["id"] => string(1) "1"      ["title"] => string(4) "test"      ["content"] => string(12) "test_content"      ["category"] => string(13) "test_category"      ["area"] => string(6) "北京"      ["add_user"] => string(5) "admin"      ["add_time"] => string(19) "2014-11-20 23:03:44"    }    [1] => array(7) {      ["id"] => string(1) "2"      ["title"] => string(12) "吼吼吼吼"      ["content"] => string(18) "任溶溶柔然人"      ["category"] => string(14) "test_category2"      ["area"] => string(6) "河北"      ["add_user"] => string(5) "admin"      ["add_time"] => string(19) "2014-11-22 15:16:12"    }    [2] => array(7) {      ["id"] => string(1) "4"      ["title"] => string(7) "test2_m"      ["content"] => string(4) "haha"      ["category"] => string(0) ""      ["area"] => string(6) "福建"      ["add_user"] => NULL      ["add_time"] => string(19) "2014-11-22 11:44:26"    }    [3] => array(7) {      ["id"] => string(1) "5"      ["title"] => string(2) "22"      ["content"] => NULL      ["category"] => string(0) ""      ["area"] => string(6) "福建"      ["add_user"] => NULL      ["add_time"] => string(19) "2014-11-22 12:40:58"    }    [4] => array(7) {      ["id"] => string(1) "6"      ["title"] => string(1) "1"      ["content"] => string(1) "2"      ["category"] => string(0) ""      ["area"] => string(6) "福建"      ["add_user"] => NULL      ["add_time"] => NULL    }    [5] => array(7) {      ["id"] => string(1) "7"      ["title"] => string(6) "lalala"      ["content"] => string(6) "hohoho"      ["category"] => string(0) ""      ["area"] => string(6) "北京"      ["add_user"] => NULL      ["add_time"] => NULL    }  }

复制代码

  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. ?>

就那样简单几行,然后打开浏览器,输入
四个TP项目就那样打造出来了。你会看出

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

 

  1. ^_^ Hello,欢迎使用ThinkPHP!

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

例2:让 tpk_article 表的内容据悉客户所在的地带展现当地的音信:

复制代码

填充字段:正是急需进行处理的表单字段,这么些字段并不一定假使数据库表中的字段,对于表单内的救助检查和测试字段比如重复密码和验证码也能够处理。
填充条件:ADD | UPDATE | ALL(注意,此是1.5版本说明,1.6已改为1 2
3,后续教程有证实)
当为ADD时,会在新增多少时自动填充,那是默许的处理格局
当为UPDATE时,在立异数据的时候会自动填写
当为ALL时,全体情状下都会进行自动填写

ArticleModel.class.php:

那行字。并自行为您创制好项目标目录。接下来,大家这一个类型添砖加瓦。

外加规则:外加规则是指向填充内容而言,表示该内容填充的格局,包罗function,callback,田野(field),string
对于田野同志使用其余字段举办填空和string直接标示字符串作为值进行填写很好掌握。例如地点

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

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

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

控制器代码:

二简便认识项目里的各种文件夹

复制代码

IndexAction.class.php:

名词解释:

固然将气象status字段的值直接以1填充.

<?php  class IndexAction extends Action {        $obj=D("Article");      $rows=$obj->article();      $this->assign("list",$rows);      $this->display();

Action:模块控制器类,你权且可以驾驭为叁个Action文件表示着1个用到模块,Action文件中的每二个方法(function)代表着三个操作,操作分为有出口到模板的操作和只具执行不要求输出的操作。对于有出口的操作,则意味着了您的类型中贰个出示给用户使用的web页面。(注意:那不是规范的术语解释)

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

与此同时视图代码:

Model:数据表相对应的Model类,能够明白为二个Model文件对应着你项目数据库的个中多少个表。命名关系请参考那里:

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

TPL/Index/article.html:

在添砖加瓦以前,我们有须求认识一下顺序文件夹的用途。

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

<!DOCTYPE html>  <html>  <body>    <volist name="list" id="vo">      <li><{$vo.title}> - <{$vo.area}> - <{$vo.content}></li>  </volist>    </body>  </html>

打开Myapp文件夹,里面TP已让您很省心地构建了最核心的目录。在这之中:

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

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

Cache文件夹:项目自动生成的模版缓存相会世在那里

当使用function作为附加规则时,第二个填充内容就代表了那么些因子是二个函数名称,该函数的参数正是表示填充字段的值,比如password的值是123456,则下面的代码会先将以此值使用函数md5(‘123456’),那样处理后再插入到数据表中去。
对此function(函数)和callback(回调方法)理论是相同的,只不过二个是表示填充内容所写的是函数名,另一个是象征填充内容是类中的方法名。函数能够是PHP5内置函数或你本人所写的函数。而callback是当下模型类所能调用的贰个格局。 至于数据填充方面包车型地铁详细资料,请参考官方使用手册
《ThinkPHP数据操作指南》

bf88必发唯一官网 5

Common文件夹:你的门类中要用到的温馨写的函数,可以在这些文件夹下创设四个名为common.php文件,
在那一个文件中书写函数,那个函数能够用在您项目标相继类,同时也足以在模板变量中运用,TP框架会自动加载。

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

小结:自定义模型映射,3个模型对应3个数据表,全数增加和删除改查都在模型类中做到。M
实例化的参数是数据库的表名,D 实例化的是和谐在 model
文件夹下建立的模子文件。

Conf文件夹:项指标运作配置文件config.php将身处这么些文件夹里,(还有路由配置,调节和测试配置等,请先忽略)

  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>

 

Data文件夹:TP会把品种的数据库表字段生成到那里,其余。。。那叁个先不用理会。

在上头代码中,大家简要地建了2个form表单,并将标题统一选用三个模板变量{$title}。
action提交到的处理地点是__URL__/add,其中__URL__是二个常量定义,表示最近模块地址,TP模板引擎会自动将这句解释为/index.php/Index/add,常见的沙盘使用的常量有

3.create 方法

Lang文件夹:项目标言语设置目录,先不要理会。

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

TP 对数码的插入和更新都做了冲天封装:提供了 create()
方法用于创建数量对象。

Lib文件夹:应用类库目录,在这文件夹内还有两个文本夹:Action和Model,Action目录放置命名为xxxAction.class.php的控制器文件,Model目录放置对应数据库表的命名为xxxModel.class.php的类公事。

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

概念:数据对象 ——
数据字段与数据表之间的关联,数据会被映射为类成员,再与数码表映射,最终完结数据的插入或更新。

Logs文件夹:项目中自行发出的日记文件会存放在此地。暂不必理会。

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

create() 方法是贯通操作、CU宝马X5D 操作的集合 (
蕴含数据制造、数据印证、表单验证、自动实现等 )。

Temp文件夹:数据缓存目录,存放项目中自动生成的体系运作缓存文件等,以及利用文件格局时的缓存文件等

  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. ?>

cerate() 的数据源由 POST 表单提供,比如表单中有 username
表单成分,则该因素会被电动映射为数量表中的 username
字段。数据对象创制成功现在,对象被寄存于内部存款和储蓄器中。

Tpl文件夹:模板文件目录,内有二个default文件夹,相当于默许的风格。
项目转移的目录结构就先简单介绍到那里,下一步大家要简明地对品种进展最中央的陈设。

代码知识要点:
模板变量赋值后面包车型大巴章节已介绍过。那里就不啰嗦了。

例:添加数码

三创设数据表,并对项目举行配备,以便连接到数据库。

作者们来看看add方法的代码。
$Form = D(“Form”);
那边运用了TP的特点单字母函数D,是操作数据库时最常用的TP函数,表示实例化Form对象,
即$Form = new FormModel();
D函数的现实代码能够查阅ThinkPHP目录内的common/function.php中的片段,
它会自动引入Model类,并判断以前即使实例化过那些Model,就不再实例化,若然该Model不存在,就会抛出非凡错误,其余,D能够跨连串访问Model,权且忽略。

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

1
大家这边运用的是Mysql数据库,利用PhpMyadmin新建贰个数据库,名称为myapp。
使用示例核心中的sql如下:

$Form->create()
利用Model类的Create方法创造二个Form对象,退步会重返false。

IndexAction.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 ;

$Form->add(); //add方法会将表单数据实行写入
$this->redirect(); //执行跳转
就这么不难几行代码,便不加思索了对数码插入的拍卖。

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

复制代码


视图: Tpl/Index/add_article.html:

2
在Conf文件夹内,建立一个config.php文件。那个文件,正是Myapp项目标布署文件。系统会自动加载
config.php文件中的配置是以数组重返格局开始展览定义,会覆盖TP框架中的common目录下convention.php的暗中同意配置。没有设置的配置,就以暗中认可为准。配置安装可以使用C函数动态改变,一时不必理会。
而大家连接受数据库的设置也是在那一个文件中书写。

<!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>

config.php代码如下:

__URL__/add 表示如今控制器的 add 动作。

  1. <?php
  2. if (!defined(‘THINK_PATH’)) exit();
  3. return array(
  4. ‘DB_TYPE’=>’mysql’, // 使用的数据库是mysql
  5. ‘DB_HOST’=>’localhost’,
  6. ‘DB_NAME’=>’myapp’,// 数据库名
  7. ‘DB_USER’=>’root’,
  8. ‘DB_PWD’=>’123456’,// 填写您总是数据库的密码
  9. ‘DB_PORT’=>’3306’,

  10. ‘DB_PREFIX’=>’think_’, // 数据表表名的前缀
    请参见

  11. );

  12. ?>

add 动作代码:

复制代码

<?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("数据添加失败");          }  }

一时半刻便是那般,前面会再依据供给更进一步丰裕和讲课。

事例甘休。

3
在Lib/Model目录下,创立一个文件,命名为FormModel.class.php。命名规则刚才你已看了四次。
那边就不再多说,我们得以见见,数据表名是think_form,由于大家安插了数据表表名的前缀为think_,
故而文件的命名直接使用 “不含前缀的多寡表表名+Model.class.php”就行了。
在那些文件中书写代码:

 

  1.  
  2. <?php
  3. class FormModel extends Model {
  4. }
  5. ?>

4.模子属性( Model )

复制代码

 _map 属性:字段映射

就这么定义1个类名就行了。该类继承了Model类。至于自动验证,自动过滤,自动填写那几个,暂时不理睬。

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

4 提前先爽一下吧。再度使用PhpMyAdmin,在该表中插入一些数额
sql如下:

视图:Tpl/Index/add_article.html:

  1. INSERT INTO `think_form` (`id`, `title`, `content`,
    `create_time`, `自定义基类,ThinkPHP学习笔记1。update_time`, `status`, `email`) VALUES
  2. (1, ‘那是测试数据’, ‘dfdf’, 1212724876, 0, 1, ‘dddd@ddd.com’);
<!DOCTYPE html>  <html>  <body>        <form method="post" action="__URL__/add">            <input type="text" name="subject" placeholder="标题"><br><br>          <textarea name="textEdit" id="content" placeholder="内容"></textarea><br><br>           <input type="submit" name="submit" value="提交">        </form>    </body>  </html>

复制代码

模型:ArticleModel.class.php:

接下来大家打开Myapp/Lib/Action/IndexAction.class.php文件,将内部的始末删掉。改成下边这样:

<?php  class ArticleModel extends Model{        //使用_map属性(字段映射)将表单元素映射为相应表字段      protected $_map = array(                    "subject"=>"title",          "textEdit"=>"content"      );    }
  1. <?php
  2. class IndexAction extends Action{
  3.     public function index(){
  4.         $form = D(‘Form’)->findall();
  5.         dump ( $form );
  6.         exit;
  7.     }
  8. }
  9. ?>

控制器:IndexAction.class.php:

复制代码

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

开辟浏览器,输入

事例结束。

前天先到此处,下一步大家继续稳步前进。让大家一齐把那个Form最终变成二个有会员成效的留言板。

 

 

② 、基础模型

 

1.连贯操作

[教程] 一步一步遵纪守法学习TP二(新手篇)

贯穿方法除了 select() 方法外,其余的贯通方法不区分前后相继。

 

例:

出于时间涉及,此连串联合学习课程更新的进程会相比较慢些,请多包含,上一章节的内容请看这里。

$rows=$obj->where("add_user='dee'")->order("add_time desc")->limit(10)->select();

 

PHP开发,无非是对数据库使用了逻辑控制的增加和删除改查和动用模板输出数据内容。
一般性数据的插入都是透过表单来实行添加。表单提交涉及到页面展现,
由此这一节我们权且放下对数据库的操作讲解,先来简单学习一下TP的模板引擎的变量输出。

2.CURD

第二节不难精通TP的沙盘输出
上一章节我们提及到,

① 创造数量 add()

TP中的每三个xxxAction.class.php文件表示着三个利用模块,此Action中的每3个方法(function)代表着三个操作,操作分为有出口到模板的操作和只具执行不要求输出的操作。

<?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("数据添加失败");          }      }  }

打开Myapp/Lib/Action/IndexAction.class.php文件,大家看看个中的基本功代码

另二个例证:

  1. class IndexAction extends Action{
  2.     public function index(){
  3.     }
  4. }
<?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("数据添加失败");          }      }  }

复制代码

 

理论知识:

② 更新数据 save()

1
在TP开发中,要追加八个应用模块,就在Action文件夹里建立二个类,类的文书命名格式是模块名称+Action.class.php。例如大家那里的采用模块是Index,所以定义文件名为IndexAction.class.php

<?php    class IndexAction extends Action {      public function post2(){            $articleObj = M("Article");          $data['id'] = 2;          $data['title'] = $_POST['subject'];          $data['content'] = $_POST['textEdit'];          $data['area'] = '河北';          $data['add_time'] = date("Y-m-d H:i:s",time());          if($articleObj->save($data)){                $this->success("数据修改成功");          }else{                $this->error("数据修改失败");          }      }  }

2
应用模块类的概念要三番五次框架的Action类。要为那一个应用模块添加3个操作,则定义1个以此操作为命名的function.例如地方的index操作。

 

普普通通四个运用模块中,会有好多操作(function)须求有与用户交互的页面,那就供给利用模板输出,
TP自个儿已松手了一套拥有TP特色的,很强大易扩张但使用非凡有利兼不难的沙盘引擎。

 

在应当模块中,借使有个别操作是索要页面展现的,只要对应在Myapp/Tpl/default/里创设多个文件夹,文件夹以应用模块的称呼来定名,然后在那一个文件夹下,建立1个以那几个function名称来命名的html文件,就足以在这么些措施中央银行使$this->display()方法来直接调用该模板。(当然也能够调用别的模块下的别样模板或显式钦命模板文件地点和名称,由于是规行矩步式的学习,就让我们先忽略吧)

③ 读取数据 select 和 getFiled

问询那么些理论后,大家先简单实操一下这么些知识。

getField 例子:

1
在Myapp/Tpl/default/下建立三个文件夹,依照使用模块的称呼,大家将那个文件夹命名为Index

<?php    class IndexAction extends Action {        public function post3(){            $articleObj = M("Article");          if($articleObj->where("id=3")->setField("content","{$_POST['subject']}")){                $this->success("数据修改成功");          }else{                $this->error("数据修改失败");          }      }  }

2
在Myapp/Tpl/default/Index/下树立3个html文件,依照操作名称,咱们命名该公文为index.html

 

3 打开Myapp/Lib/Action/IndexAction.class.php文件,修改代码为

④ 删除数据 delete

  1. <?php
  2. class IndexAction extends Action{
  3.     public function index(){
  4.         $value  =   ‘hello,ThinkPHP’;
  5.         $this->assign(‘name’,$value);
  6.         $this->display();
  7.     }
  8. }
  9. ?>
<?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官方手册,不再注明)

3.查询语言

在Action类里面使用
assign方法对模板变量赋值,无论何种变量类型都统一采纳assign赋值。

例子:

  1. $this->assign(‘name’,$value);
<?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");      }  }

复制代码

 

// 下边包车型大巴写法是一致的

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

  1. $this->name = $value ;

 

复制代码

参考资料:《PHP MVC 开发实战》

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

 

  1. $this->display();

复制代码

4 打开Myapp/Tpl/default/Index/index.html文件,代码为

  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>

复制代码

代码知识要点:
模板变量使用{$变量名称}那种标签进行输出。
差异的模板变量类型,使用不相同的价签,标签能够活动其它定义,暂时不理会。

5
打开浏览器输入地方:
外加补充知识:
1 假若要同时输出多个模板变量,能够运用上边包车型大巴主意:

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

复制代码

如此这般,就能够在模板文件中而且输出name、email和phone多少个变量。
2 大家应用方面包车型客车变量定义,将全部数组定义为3个模板变量来输出

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

复制代码

在html中,要输出$array[‘name’]的值,代码是

  1. {$array.name} 或 {$array[‘name’]}

复制代码

3 将以此数组循环输出

3.1 IndexAction.class.php中代码更改如下

  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. ?>

复制代码

3.2 将Myapp/Tpl/default/Index/index.html代码更改如下:

  1. <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
  2. <html>
  3. <head>
  4. <title>{$name}</title>
  5. </head>
  6. <body>
  7. <iterate name=”array” id=”vo”>
  8. {$vo}<br />
  9. </iterate>

  10. </body>

  11. </html>

复制代码

代码知识要点:
name=’array’是指要循环的模板变量是array,id=’vo’是指那些数目在模板输出时所运用的名号

对于TP的沙盘引擎输出先简单掌握到那边。

 

 

 

 

[教程] 一步一步鲁人持竿学习TP三(新手篇)

 

率先节  快捷起头1个品种

首节 简单认识项目里的依次文件夹

其三节 配置项目,连接数据库。

第二节 简单领悟TP的模版输出

第四节开端摸底ULacrosseL怎么着访问模块操作

透过后边的就学,大家已大概地领会了动用模块中的操作与模板怎么样对应。
而这一节将不难讲解怎么着通过ULX570L来做客操作。由于大家要稳中求进,所以先只介绍下面章节要用到的学识,要想深切学习还请参见官方手册《U劲客L设计和SEO匡助》

TP帮助多种URubiconL访问方式,私下认可是智能情势,所以我们就那种格局进行简单表达。

智能格局下的UGL450L基本结构是这般的

你能够知道为
http:// 服务器地址 / 入口文件地点 / 应用模块名称 /具体操作名称/ GET变量参数

解释一下上边文字中所译的UEvoqueL结构,
何以appname项目名称小编将它译成了进口文件位置:平日状态下,大家的入口文件index.php都以身处根目录中,这时项目名称就会被输入文件index.php所替代。在前几节里,我们已知道,1个Action文件正是二个运用模块,而使用模块中的各个方法(function)正是二个具体操作。因而,借使要访问我们实例中的Index模块下的index操作。地址应该是

假若进口文件不是在服务器的根目录,而是在myapp目录下,那么入口文件地点正是Myapp/index.php,此时方面包车型客车U君越L访问就相应要换来

如此那般说应该很清楚了,可是别让这么多index给混乱咯,对应U奥迪Q7L的布局去明白每多个index的函义,同时注意分寸写

简单实际操作:

1
打开Myapp/Lib/Action/IndexAction.class.php文件,在index这么些function下再添加一个操作test

  1. <?php
  2. bf88必发唯一官网,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.     }
    1.     public function test(){
    1.         header(“Content-Type:text/html; charset=utf-8”);
    1.         echo ‘哈,访问正确!!’;
    1.     }
  10. } // 类定义end

  11. ?>

复制代码

2
尝试对应U宝马X3L结构,来访问那么些test操作,要是能学有所成看到echo的文字。则那节大家又学会了多或多或少文化。

外加知识点:
    去掉URL里面的index.php
    要去掉U奇骏L里的入口文件index.php,使U奥迪Q5L类似那样的花样 
 
    能够按法定手册所提供的方法开始展览如下操作。
    1 承认httpd.conf配置文件中加载了mod_rewrite.so模块
    2 AllowOverride None 将None改为 All
    3 打开Myapp/Conf/config.php文件,在配置的数组中添加一行:
    ‘URL_MODEL’=>2,
    在输入文件所在的同级目录下,新建多个.htaccess文书,内容是

  1.     <IfModule mod_rewrite.c>
  2.     RewriteEngine on
  3.     RewriteCond %{REQUEST_FILENAME} !-d
  4.     RewriteCond %{REQUEST_FILENAME} !-f
  5.     RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
  6.     </IfModule>

复制代码

一经您的服务器环境帮忙rewrite,使用
    此后大家的上学中用到的U揽胜L,都以若是你使用了rewrite的景况。

第6节 CULacrosseD知识之一 C 创设(create)

 

.htaccess.rar (248 Bytes)

 

 

 

[教程] 一步一步循规蹈矩学习TP四(新手篇)

 

率先节  飞速先河贰个种类

其次节 不难认识项目里的逐一文件夹

其三节 配置项目,连接数据库。

第三节 简单询问TP的沙盘输出

第4节 初叶询问U昂CoraL怎么着访问模块操作

只顾:看到不少留言说操作不成功或出错,请别忘记,此体系教程出来时,TP1.6还没出去,所以一连串6以前所介绍的言传身教和操作都照旧专业版本1.5的,若是你使用1.6版,请对应两者差别性。
比如说submit无法有name属性,是因为原先1.5有字段缓存举行过滤处理。1.6没有了字段缓存。
譬如数据自动验证和机关填写都有了必然的分别。

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

第六节 CUOdysseyD知识之一 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目录下建立三个文书FormModel.class.php

模型类的独特命名仍是能够智能识别驼峰式的表命名,借使大家有个是相近think_new_table那样的表
能够命名为NewTableModel.class.php。暗许配置便能够智能识别自动对应think_new_table表,由此不必修改配置。

付出进度中,只要容易地定义好与数据表对应的模型类(xxxModel.class.php),就能够开始展览对数据操作了。
怎么样让这几个模型支撑活动验证,自动填充,自动过滤那个文化,在上面涉及到时会作相应讲解。

貌似的话,在表中添加多少都以透过表单来建立,为了更直观地学习CUMuranoD中的C,我们接下去建立个表单来展开添加数据的操作。
前边大家已在Myapp/Lib/Model/下树立好FormModel.class.php类—-模型(M)
并且也在Myapp/Lib/Action/下添加了三个Index应用模块和写下了一个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,田野同志,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函数作为该字段的值进行自动填写。
再看1个function作为附加规则的例证

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

复制代码

当使用function作为附加规则时,第三个填充内容就表示了那一个因子是二个函数名称,该函数的参数就是意味填充字段的值,比如password的值是123456,则上面包车型地铁代码会先将以此值使用函数md5(‘123456’),那样处理后再插入到数据表中去。
对于function(函数)和callback(回调方法)理论是均等的,只然则多少个是意味填充内容所写的是函数名,另三个是表示填充内容是类中的方法名。函数能够是PHP5内置函数或你协调所写的函数。而callback是当下模型类所能调用的3个艺术。 有关数据填充方面包车型地铁详细资料,请参见官方使用手册
《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>

复制代码

在上头代码中,我们简要地建了2个form表单,并将标题统一采纳二个模板变量{$title}。
action提交到的拍卖地方是__URL__/add,其中__URL__是2个常量定义,表示如今模块地址,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(); //执行跳转
仿佛此简单几行代码,便不加思索了对数码插入的拍卖。
今昔大家得以品味一下在表单中输入数据进行提交试试了。
请先随便插入几条数据,以便下一节大家一而再读书CULANDD中的Sportage

 

 

 

[教程] 一步一步鲁人持竿学TP五(从标准版过渡到1.6版)

很对不起!不得不出这一篇过渡文章。
为了让那类别教程不致于日后会误导,从那节初步,让大家转型到1.6版的使用方法上。
可是对于1.6版的施用,小编也是在物色当中学习,错误和不足之处肯定会比较多,
故恳请小运表哥和tdweb,东至,yhustc等大大能够即时指正和补充,在此先谢谢了。

——————– 基于本学习种类1-4接通到本节的填补表明

阐明1 从这节开始,TP或dev那四个简称指的都以ThinkPHP 1.6版,
可以到svn下载。

下载后去除原来的ThinkPHP框架文件,将dev同样命名为ThinkPHP,并仍是放置于网站的根目录下。
其它,为了方便须求时得以对实例截图而不引起读者你误会,基于本人的网站目录结构,现将Myapp的index.php地方变动到Myapp文件夹下(不再是原来的根目录).
步1:将根目录中的原index.php剪切并粘贴到Myapp文件夹下。更改代码为:

  1. <?php
  2.     // 定义ThinkPHP路径
  3.     define(‘THINK_PATH’,’../ThinkPHP’);
  4.     // 定义项目名称
  5.     define(‘APP_NAME’,’Myapp’);
  6.     // 定义项目路线
  7.     define(‘APP_PATH’,’.’);
  8.     // 加载框架入口文件
  9.     require(THINK_PATH.’/ThinkPHP.php’);
    1.     // 实例化这一个类型
    1.     $App = new App();
    1.     // 执行起初化
    1.     $App->run();
  10. ?>

复制代码

代码补充注释:代码中项目名称其实是能够不要定义的,系统会活动依照当下的目录名定义名称。
步2: 将.htaccess文件复制一份粘贴到Myapp目录下。
步3: 将Cache目录,Temp目录,Data目录清空。

证实2 第陆节中对此U酷路泽L访问的暗中同意格局
在dev版私下认可配置中,dispatch即UWranglerL调度功效是倒闭的,所以在暗中同意情势下,要拜访Index模块的index操作,地址应是:index.php?m=index&a=index,m指的是模块变量(Model),a指的是操作变量(Action)。
一经要使用类似第④节中的index.php/moduleName/actionName形式,则要在config.php文件里安装DISPATCH_ON为true;
再者,也唯有打开了此意义后,U奥迪Q5L_MODEL的安装才会有效。
(在上边的章节我们提及过,能够安装UEvoqueL_MODEL为2来行使rewrite效能去除突显index.php)
于是,今后我们的config.php代码是

  1. <?php
  2. if (!defined(‘THINK_PATH’)) exit();
  3. return array(
  4.     ‘DB_TYPE’=>’mysql’, // 使用的数据库是mysql
  5.     ‘DB_HOST’=>’localhost’,
  6.     ‘DB_NAME’=>’myapp’,// 数据库名
  7.     ‘DB_USER’=>’root’,
  8.     ‘DB_PWD’=>’123456’,// 填写您总是数据库的密码
  9.     ‘DB_PORT’=>’3306’,
    1.     ‘DB_PREFIX’=>’think_’, // 数据表表名的前缀
      请参见
    1.     ‘DISPATCH_ON’=> true,
    1.     ‘URL_MODEL’=>2,
    1.     ‘TMPL_VAR_IDENTIFY’=>’array’,// 模板变量识别
      留空自动判断 array 数组 obj 对象
    1.     ‘DEBUG_MODE’=>true,//开启调节和测试格局
  10. );

  11. ?>

复制代码

代码补充注释:此节从此的内容会涉及到模板输出及数码操作,所以在此间肯定设置了模版变量为数组,并打开TP的调节和测试情势。

注意3:第4节 CUSportageD知识之一 C(创造)中的自动填写
dev版的活动填写效能已移到AdvModel类中。要利用此作用,我们必要在Myapp/Lib/Model类文件中引入该类.
那正是说再来看看大家所定义的数目表form的字段:

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

复制代码

引用tdweb手记:

要是需求新建数据时自动填写时间戳,只须要设置数据表字段名”create_time”,如果需求修改时自动保存时间戳,那么设置数据表字段名为”update_time”。
倘若你的数额表字段名不是暗中认可的,那么要求钦命,例如
protected $autoCreateTimestamps = ‘ctime’;
protected $autoUpdateTimestamps = ‘utime’;

从而,让我们开拓Myapp/Lib/Model/FormModel.class.php文件,将代码更改为如下:

  1. <?php
  2. // 导入AdvModel类
  3. alias_import(‘AdvModel’);
  4. class FormModel extends AdvModel {
  5. /* 如若数据表的 成立时间
    字段不是create_time,供给其余设置成如下方式*/
  6.     //protected $autoCreateTimestamps = ‘ctime’;
  7.     // 自动填写设置
  8.   protected $_auto  =  array(
  9.   array(‘status’,’1′),//自动填写的定义规则请参见第⑥节内容
    填充规则有所差别,见附注

  10. );

  11. }

  12. ?>

复制代码

代码补充注释:
注意:dev版的填充条件改为1 新增 2 更新 3
包罗1和2,暗许为新增。所以定义更有益于了.而接纳ADD | UPDATE |
ALL会无效的(TO大运堂弟:TP代码还有四个风味正是函数或措施的命名很吻合语言使用习惯,原来的add,update,all很直观,易记,可惜没了)
array(‘田野同志’,’填充内容’,’填充条件’,’附加规则’,[外加参数])

alias_import($alias,$classfile=”)高速定义和别名导入 

那是增创的函数,笔者尝试申明一下,不正确请指正。
该函数能够动态设置文件列表导入和直接导入文本,常会用到的公文别名有

‘Page’                  分页类     Page.class.php’,
‘ViewModel’        视图模型类 ViewModel.class.php’,
‘AdvModel’          高级模型类 AdvModel.class.php’,
‘RelationModel’   关联模型类 RelationModel.class.php’,

当要引入已定义别名的文书,我们若是间接在参数中传递别名就行了。
别名可以活动在ThinkPHP/Common/alias.php中扩充。
除却行使已定义的别名外,也得以使用动态内定。

  1. alias_import(‘zzg’,APP_PATH.’/Lib/ORG/zzg.php’);

复制代码

或1回引入四个公文

  1. $ailias=array(
  2.     ‘Abc’=>   APP_PATH.’/Lib/ORG/abc.php’,
  3.     ‘Efg’ =>  APP_PATH.’/Lib/Other/efg.php’,
  4. );
  5. alias_import($ailias);

复制代码

注:钦命文件或别名不存在时会再次来到false

就像的函数还有
import($class,$baseUrl = ”,$ext=’.class.php’)

时局三弟语:由于性格难题,那么些主意以往不再协理

那是ThinkPHP内建的类库和文书导入的一个函数,具有缓存和检查和测试机制,相同的文本不会另行导入,争论时会提醒错误。使用那办法时,系统会自动识别导入类库文件的职位:
Think 代表TP框架基类库 即ThinkPHP/Lib/Think目录
O福睿斯G 代表第①方共用类库 即ThinkPHP/Lib/O逍客G目录
@ 代表当前项目类库,例如Import(“@.Action.xxxAction”)
—-即Myapp/Lib/Action/xxxAction.class.php
@指的是当下项目名称,那和使用Import(“Myapp.Action.xxxAction”)是同样的。
TP的预订是Think、O奥迪Q3G等导入的是以种类(TP)基类库为相对初阶目录,不然就觉得是连串(Myapp)应用类库为发端目录。
留意1 行使时要留心文件名的深浅写
留神2
Import会自动将.转换为/,假诺文件名中含有.,则要将.改为#才能健康导入。
留意3 导入的类公事后缀默许是.class.php

2 第叁方框架类库导入:vendor($class,$baseUrl = ”,$ext=’.php’), 胚胎目录统一是ThinkPHP/Vendor
私下认可后缀是.php
注:vendor也应用了Import函数。由此…

证实3,原来的沙盘文件index.html保持不变,因为我们已启用了DISPATCH_ON开关。
仅将Myapp/Lib/Action/IndexAction.class.php代码更改如下

  1. <?php
  2. class IndexAction extends Action{
  3.     public function index()
  4.     {
  5.         $Form = D(“Form”)->select();
    //也可以D(“Form”)->findAll()
  6.         dump ( $Form );// 输出查询结果
  7.         $this->assign(‘title’,’添加数据’);//定义题指标沙盘变量
  8.         $this->display();// 渲染模板
  9.     }
    1.     // 插入数据
    1.     function add()
    1.     {
    1.         header(“Content-Type:text/html;
      charset=utf-8”);//为了唤起时不乱码
    1.         $Form = D(‘Form’);//实例化Form模型
    1.         $vo  =   $Form->create();//成立数量对象
    1.         if(false === $vo) {
    1.                exit($Form->getError().’ [ <a
      htef=”javascript:history.back()”>返 回</a> ]’);
    1.         }
    1.         $rs =  $Form->add();//插入数据
    1.         if ($rs) {
    1.             redirect(‘/Myapp/’,2,’数据增进成功!’);
    1.         }else{
    1.             exit($Form->getError().’ [ <a
      HREF=”javascript:history.back()”>返 回</a> ]’);
    1.         }
    1.     }
  10. }//类定义 end

  11. ?>

复制代码

代码补充表达:

select($options=array());

为了有利于查看数据,index操作中运用到了二个宗旨查询办法

tdweb语:select()方法代替了在此以前相比较流行的findAll(),不传任何参数则是收获全部数据。

咱俩仍是稳中求进,具体有关查询的方法会在运用的时候陆续一起读书。

dump($var, $echo=true,$label=null,
$strict=true)
函数。浏览器友好的变量输出。
当唯有一个$var参数时,会直接打字与印刷那些$var。
dump($Form);会输出接近

  1. array(1) {
  2.   [0] => array(7) {
  3.     [“id”] => string(1) “1”
  4.     [“title”] => string(18) “那是测试数据”
  5.     [“content”] => string(4) “dfdf”
  6.     [“create_time”] => string(10) “1212724876”
  7.     [“update_time”] => string(1) “0”
  8.     [“status”] => string(1) “1”
  9.     [“email”] => string(12) “dddd@ddd.com”
    1.   }
  10. }

复制代码

也能够安装参数
dump($要出口的变量, 是或不是直接打字与印刷0或1,变量表明 ,
是还是不是以正规数组情势0,1)
例如:

  1. dump($Form,1,’Form数据’,0);

复制代码

输出接近

  1. Form数据 Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [id] => 1
  6.             [title] => 那是测试数据
  7.             [content] => dfdf
  8.             [create_time] => 1212724876
  9.             [update_time] => 0
    1.             [status] => 1
    1.             [email] => dddd@ddd.com
    1.         )
  10. )

复制代码

$vo = $Form->create();

始建数量对象 但不保留到数据库
模型类的create方法,假诺没有设值,则暗中同意是经过表单提交的数据$_POST实行创办。
再正是Create方法也支撑从其他方法例如数据对象可能数组等来创建,
对那办法与tdweb的说教有个别不雷同,望指正。

由于简洁版并不自动生成多少表data缓存,所以就算您用create()而不给她传递任何值,仅仅凭借$_POST获得值,那么不论你的表单POST什么,程序都会以为是数据库的字段拼入QL,所以,如若你POST过来的数目而数据表里没有那一个字段,则会冒出增进战败。

但自作者见状代码里就像已自行过滤不吻合的数量,并测试过添加多少表里没有的字段没有出现增进战败。
redirect(‘/Myapp/’,2,’数据增加成功!’); 跳转函数。
函数原型:redirect($url,$time=0,$msg=”)
看参数就已经很明白了。

联网篇就先到此处,提出咱们多点出手实际操作和看望源代码。

下一节大家再持续,请各位务必多多指教。

 

 

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

在上一节实际操作中,我们已成功插入了多条测试的数量,可是很显明,大家发现个中的邮箱地址一项不吻合格式也得以交到,那本来不是大家所期待看到的,那时咱们得以应用TP的多少自动验证功用去决定用户输入。
而此前已交由的数额,也得以通过编写制定数据将本来错误格式的邮箱地址重新改变为不易的email,这一个处理让大家都置身下一节的数量编辑中一起读书。

之前,先来看看TP最基本的多少查询。

8 节数据查询(CU科雷傲D之锐界)
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倒序的方式浮今后模板上。

—苏醒内容甘休—

发表评论

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

网站地图xml地图