金沙澳门官网7817网址ThinkPHP 学习笔记 ( 三 ) 数据库操作之数据表模型和基础模型 ( Model )

而把我们自定义的 Model 类作为我们项目中的 Model,不过自定义的 Model 同样要继承 TP 提供的 Model,一、定义数据表模型,查看数据库的链接状态,继而看了ThinkPHP框架,方便记忆性的学习转载了一些以下文章,TP的手册相当多,以TP示例中心中的Form为例进行讲解

 

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

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

  use 引进的命名空间是 Admin\Model\BaseModel ,因为我们定义的
BaseModel 的命名空间是 Admin\Model,因为此处的 TrunkModel 和 BaseModel
在3个命名空间下,省去 use 也是可以的。

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

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

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

庸俗的要求

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

在第二节时,曾略为涉嫌Model类文件命名,现在再记念一下那部分的剧情:
我们事先在数据库中,已确立了1个think_form数据库表,并且在计划文件config.php中,大家定义了数据表的前缀是think_,
模型类(Model)文件的命名规则是:

复制代码

   ThinkPHP 提供了一个 Model 类,供其余的 Model 实行后续。Model 类中是
MVC 中的模型类,它是调用 持久层
的上层类。感觉那样描述难题多多,可是有怎么样点子吧?然而,这么些 Model
有时不可能满意我们的一些急需,因而大家要求自定义三个 Model
类出来,可是自定义的 Model 同样要继续 TP 提供的 Model
类,而把大家自定义的 Model 类作为大家项目中的 Model
基类。小编怎么感觉作者在说绕口令,等等…作者有点晕。

add 动作代码:

最近可比绕有趣味地上学PHP,看完了一部分基础语法、学会了使用SMALANDY模版,继而看了ThinkPHP框架,

3 将那么些数组循环输出

  继承的 BaseModel 的格局和继承 Model 的格局是一律的,只是利用 use
引进命名空间到方今效益域时的内需修改为大家的命名空间,而不是再去选取 TP
提供的命名空间。代码如下:

视图: Tpl/Index/add_article.html:

此框架的有力超出笔者的不测,它的RO本田UR-V真是强,还有内置的CRUD,比JAVA的框架更智能。

前言
TP的手册非凡多,其实不用再出如此的贴子,论技术,小编也是菜鸟贰个,同时也在上学在那之中。
看样子论坛上多了成都百货上千新情人,不少在抱怨手册看不懂,那小编就姑且进行试探,尝试与新情人们更简短地、手把手地进入TP的选取中去。讲解进度中有错的地点,大家扶助指正。

  那样,在大家用 D 方法实例化 TrunkModel 的目的后,使用 add
方法插入数据时,就会先调用 BaseModel 中的 add
方法了,那样大家每张表都有的 create_by 等壹多重字段就都会自行获取了。

壹 创建数量 add()

之所以从前我们为think_form数据表在Myapp/Lib/Model目录下建立贰个文书FormModel.class.php

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

自定义2个 Model

2.CURD

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

下一场我们开辟Myapp/Lib/Action/IndexAction.class.php文件,将在那之中的剧情删掉。改成上边那样:

 

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

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

三创办数据表,并对品种进展示公布局,以便连接到数据库。

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

IndexAction.class.php:

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

复制代码

  定义代码如下:

 _map 属性:字段映射

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

TP中的每一个xxxAction.class.php文件表示着三个选择模块,此Action中的每叁个方式(function)代表着多个操作,操作分为有出口到模板的操作和只具执行不须要输出的操作。

 

2.自定义模型

外加规则:外加规则是指向填充内容而言,表示该内容填充的点子,包涵function,callback,田野,string
对此田野先生使用此外字段实行填写和string直接标示字符串作为值进行填空很好通晓。例如地点

复制代码

 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     }

另一个例子:

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

4 与ThinkPHP同级新建1个文书夹,起名称叫 Myapp,相当于项目名称

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

三.查询语言

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

  1. class IndexAction extends Action{
  2.     public function index(){
  3.     }
  4. }

持续大家定义的基类

填充字段:就是内需举办拍卖的表单字段,这几个字段并不一定倘诺数据库表中的字段,对于表单内的佑助检测字段比如重复密码和验证码也能够处理。
填充条件:ADD | UPDATE | ALL(注意,此是一.5本子表达,一.陆已改为一 2三,后续教程有表明)
当为ADD时,会在疯长多少时自动填充,那是私下认可的处理形式
当为UPDATE时,在立异数据的时候会自行填写
当为ALL时,全体景况下都会议及展览开自动填写

二 拟好您的项目名称,咱们那里以 Myapp 为项目名称

  在行使 Java 的开源项目 JeeSite
时,养成了三个不好的习惯,习惯给每张表都扩张create_by、create_date、update_by、update_date、remarks 和 del_flag
这么多少个字段。假诺每张表都有那多少个字段,那么对每张表举办 insert
时都会对上述的字段实行安装,对每张表举行 update
时都会对内部有些字段进展革新,对每条记下实行 delete 时都其实是对
del_flag 字段展开
置位。重复操作很多,一些操作方法被修改。那么,那一年就要自定义七个投机的
Model 来作为项目标 基类 了,这么些 Model 就背负干上边我说的那1个事情了。

<?php  class IndexAction extends Action {        $obj=D("Article");      $rows=$obj->article();      $this->assign("list",$rows);      $this->display();
  1. array(‘status’,’1′,’ADD’),

TP辅助二种U卡宴L访问格局,私下认可是智能方式,所以大家就那种情势展开简单表达。

  这样,咱们的 BaseModel 就定义好了,以后项目中的 Model 就不再接续 TP
的 Model 类了,而是继续大家自定义的 BaseModel 了。

 

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

 

 

<?php    class IndexAction extends Action {            public function delete(){            $articleObj = M("Article");          if($articleObj->where("id=".$_GET['id'])->delete()){                $this->success("数据删除成功");          }else{                $this->error("数据删除失败");          }      }  }
  1. protected $_auto  =  array(
  2. array(‘password’,’md5′,’ADD’,’function’),
  3. );

一时半刻就是如此,前边会再依照须求更为助长和任课。

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

其中的create_time字段是为了记录数据插入的日子,大家得以使用TP的数码自动填充来处理。

  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>

一、定义数据表模型

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

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

create() 方法是贯通操作、CU瑞鹰D 操作的集合 (
包蕴数据创立、数据印证、表单验证、自动完毕等 )。

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

二在Myapp/Tpl/default/Index/下建立二个html文件,依照操作名称,大家命名该公文为index.html

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

模型类的异样命名还足以智能识别驼峰式的表命名,假诺大家有个是看似think_new_table那样的表
能够命名叫NewTableModel.class.php。默许配置便足以智能识别自动对应think_new_table表,由此不必修改配置。


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

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

名词解释:

TPL/Index/article.html:

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

那行字。并自行为你创设好项目标目录。接下来,大家以此类型添砖加瓦。

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


——————– 基于本学习类别壹-4衔接到本节的补偿表达

注解一 从那节初始,TP或dev那多少个简称指的都以ThinkPHP 一.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. ?>

复制代码

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

表明二 第伍节中对此U奥迪Q5L访问的暗中认可形式
在dev版私下认可配置中,dispatch即U大切诺基L调度成效是关门的,所以在默许格局下,要拜访Index模块的index操作,地址应是:index.php?m=index&a=index,m指的是模块变量(Model),a指的是操作变量(Action)。
假诺要运用类似第肆节中的index.php/moduleName/actionName格局,则要在config.php文件里安装DISPATCH_ON为true;
再者,也只有敞开了此意义后,URAV四L_MODEL的安装才会使得。
(在地点的章节我们聊到过,能够安装U宝马X3L_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:第6节 CU中华VD知识之一 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’,’一’),//自动填写的概念规则请参考第陆节内容
    填充规则有所分歧,见附注

  10. );

  11. }

  12. ?>

复制代码

代码补充注释:
在意:dev版的填写条件改为1 新增 贰 更新 三包蕴一和二,暗中同意为新增。所以定义更有利了.而利用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’);

复制代码

或2次引进两个公文

  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”)是1致的。
TP的约定是Think、O奥迪Q伍G等导入的是以体系(TP)基类库为相对伊始目录,不然就觉着是项目(Myapp)应用类库为起首目录。
只顾壹 采用时要专注文件名的尺寸写
留神2Import会自动将.转换为/,借使文件名中含有.,则要将.改为#才能健康导入。
留意三 导入的类公事后缀私下认可是.class.php

二 第一方框架类库导入:vendor($class,$baseUrl = ”,$ext=’.php’), 胚胎目录统壹是ThinkPHP/Vendor
暗许后缀是.php
注:vendor也运用了Import函数。由此…

证实三,原来的沙盘文件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-八”);//为了提醒时不乱码
    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操作中使用到了1个大旨查询艺术

tdweb语:select()方法代替了前头比较流行的findAll(),不传任何参数则是收获全体数量。

大家仍是渐进,具体有关查询的方法会在利用的时候6续1起学习。

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(1捌) “那是测试数据”
  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. 金沙澳门官网7817网址,}

复制代码

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

  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/’,二,’数据增进成功!’); 跳转函数。
函数原型:redirect($url,$time=0,$msg=”)
看参数就曾经很清楚了。

连着篇就先到那边,建议大家多点出手实操和看望源代码。

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

 

 

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

复制代码

在应当模块中,假使有个别操作是索要页面展现的,只要对应在Myapp/Tpl/default/里建立贰个文件夹,文件夹以应用模块的名目来定名,然后在那么些文件夹下,建立3个以这一个function名称来定名的html文件,就能够在那一个办法中利用$this->display()方法来平素调用该模板。(当然也能够调用别的模块下的其余模板或显式钦赐模板文件地点和称号,由于是绳趋尺步式的学习,就让我们先忽略吧)

便宜回忆性的学习转发了部分之下文章

其次节 不难认识项目里的各种文件夹

 

下边首要说说function与callback那八个叠加规则。

通过前边的学习,大家已大体地知道了运用模块中的操作与模板怎么样对应。
而那壹节将简单讲解怎么样通过U途锐L来拜会操作。由于大家要渐进,所以先只介绍上面章节要用到的学问,要想深刻学习还请参见官方手册《U揽胜极光L设计和SEO支持》

3.create 方法

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

  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();

__URL__/add 表示近日控制器的 add 动作。

$Form->create()
应用Model类的Create方法创设一个Form对象,退步会回去false。

2应用模块类的定义要继续框架的Action类。要为这么些利用模块添加1个操作,则定义三个这些操作为命名的function.例如地点的index操作。

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

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

[教程] 一步一步绳趋尺步学习TP二(新手篇)

例子:

CU宝马X3D知识之1 C 创立(create)

 

 

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

肆.模型属性( Model )

$Form->add(); //add方法会将表单数据进行写入
$this->redirect(); //执行跳转
就如此简单几行代码,便形成了对数据插入的处理。

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

三 读取数据 select 和 getFiled

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

在添砖加瓦从前,大家有供给认识一下一一文件夹的用途。

 

复制代码

Logs文件夹:项目中自动发出的日志文件会存放在此处。暂不必理会。

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

2  模型对象:即数据对象,你项目里每2个Model类文件都会对应着三个数据表(大概视图),模型与数量表存在一种炫耀关系。TP约定了命名要遵纪守法一定的专业,如若不适合,则必要基于气象展开额外的应和设置。例如Model类的tableName属性

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

TP 对数据的插入和换代都做了可观封装:提供了 create()
方法用于成立数量对象。

在Model类定义 $_auto
属性,能够成功数据自动处理效果,用来拍卖暗许值和任何 onclick=”tagshow(event)”>系统写入字段。
在意1:该活动填写只怕会覆盖表单提交项目。其指标是为着防止表单违规提交字段。
注意2:要采纳Model类的create方法成立数量对象的时候才会自动实行表单数据处理。

进口文件:你能够领略为那一个项目标绝无仅有壹道门,现在全数的操作都会通过这道门去履行处理。
不必理会什么看头,你居然足以先把它看作是index.php就是进口文件

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

应用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");      }  }

C的作用,正是从M中取得数据到V,

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