澳门新萄京ThinkPHP 三.2 自定义基类 Model

澳门新萄京ThinkPHP 三.2 自定义基类 Model

 

便宜回想性的学习转发了部分之下作品

例子:

代码知识要点:
模板变量使用{$变量名称}那种标签实行输出。
不等的模版变量类型,使用区别的标签,标签能够自动别的定义,如今不理会。

 

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

四.模子属性( Model )

复制代码

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

外加规则:外加规则是指向填充内容而言,表示该内容填充的措施,包涵function,callback,田野(field),string
对于田野同志使用别的字段进行填空和string直接标示字符串作为值进行填写很好明白。例如地方

二、基础模型

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

 

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

1、定义数据表模型

一时正是那般,前面会再根据须要更进一步助长和教师。

  继承的 BaseModel 的办法和持续 Model 的办法是均等的,只是采取 use
引进命名空间到近年来作用域时的须要修改为大家的命名空间,而不是再去选拔 TP
提供的命名空间。代码如下:

上面重要说说function与callback那四个叠加规则。

要测试数据库是或不是正规连接,最直接的秘籍正是在时下控制器中实例化数据表,然后利用
dump 函数输出,查看数据库的链接状态。代码:

打开浏览器,输入

百无聊赖的急需

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

例:添加数量

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

  在运用 Java 的开源项目 JeeSite
时,养成了三个不好的习惯,习惯给每张表都增多
create_by、create_date、update_by、update_date、remarks 和 del_flag
这么多少个字段。假如每张表都有那多少个字段,那么对每张表进行 insert
时都会对以上的字段举行设置,对每张表进行 update
时都会对内部一部分字段进展翻新,对每条记下进行 delete 时都其实是对
del_flag 字段展开
置位。重复操作很多,壹些操作方法被修改。那么,那一年就要自定义一个体协会调的
Model 来作为项目的 基类 了,那个 Model 就负责干上面作者说的那个事情了。

CUCRUISERD知识之1 C 成立(create)


本条体系,伊始定下的对象为,从零起先,以TP示例主旨中的Form为例进行教学,以履行为主,理论为辅,
将TP的最中央内容逛二回,至少让我们一起学会怎么开始展览最简易的对数码开始展览查、增、改、删操作并出口到模板。

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

不包括前缀的数据库表表名还要首字母大写+Model.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("数据修改失败");          }      }  }
  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();

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

复制代码

ArticleModel.class.php:

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

自定义3个 Model

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

事例截至。

复制代码

 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     }

当使用function作为附加规则时,第3个填充内容就意味着了这几个因子是多个函数名称,该函数的参数便是象征填充字段的值,比如password的值是12345六,则上边包车型客车代码会先将以此值使用函数md五(‘123456’),这样处理后再插入到数据表中去。
对于function(函数)和callback(回调方法)理论是1致的,只可是2个是意味填充内容所写的是函数名,另3个是象征填充内容是类中的方法名。函数能够是PHP伍内置函数或你协调所写的函数。而callback是如今模型类所能调用的贰个情势。 关于数据填充方面包车型大巴详细资料,请参考官方使用手册
《ThinkPHP数据操作指南》

3 读取数据 select 和 getFiled

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

 

  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>

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

  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>

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

多年来相比绕有趣味地上学PHP,看完了有的基础语法、学会了运用SMATiggoY模版,继而看了ThinkPHP框架,

 

  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 ;

此起彼伏大家定义的基类

C的法力,正是从M中取得数据到V,

2.CURD

PHP开发,无非是对数据库使用了逻辑控制的增加和删除改查和采纳模板输出数据内容。
1般而言数据的插入都以通过表单来展开添加。表单提交涉及到页面展现,
之所以那一节我们一时半刻放下对数据库的操作讲解,先来大致学习一下TP的模版引擎的变量输出。

  定义代码如下:


那儿浏览器输出:

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

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写进去

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

   ThinkPHP 提供了三个 Model 类,供别的的 Model 实行一连。Model 类中是
MVC 中的模型类,它是调用 持久层
的上层类。感觉那样描述问题多多,可是有怎么着方法吗?不过,那一个 Model
有时无法满意我们的有的须要,因而大家需求自定义二个 Model
类出来,然而自定义的 Model 同样要继续 TP 提供的 Model
类,而把大家自定义的 Model 类作为大家项目中的 Model
基类。笔者怎么感觉小编在说绕口令,等等…小编有点晕。

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

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

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

模型类的十分命名仍是能够智能识别驼峰式的表命名,借使大家有个是周边think_new_table那样的表
能够命名叫NewTableModel.class.php。私下认可配置便能够智能识别自动对应think_new_table表,因而不用修改配置。

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

——————– 基于本学习体系一-4交接到本节的补充表达

表明壹 从那节开端,TP或dev那多少个简称指的都以ThinkPHP 一.六版,
可以到svn下载。

下载后删除原来的ThinkPHP框架文件,将dev同样命名称为ThinkPHP,并仍是停放于网址的根目录下。
除此以外,为了有利于必要时能够对实例截图而不引起读者你误会,基于自个儿的网址目录结构,现将Myapp的index.php地方变动到Myapp文件夹下(不再是本来的根目录).
步一:将根目录中的原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文件复制1份粘贴到Myapp目录下。
步三: 将Cache目录,Temp目录,Data目录清空。

表达二 第四节中对此ULANDL访问的暗中认可方式
在dev版暗中认可配置中,dispatch即U奥迪Q5L调度功效是关门的,所以在暗中同意形式下,要访问Index模块的index操作,地址应是:index.php?m=index&a=index,m指的是模块变量(Model),a指的是操作变量(Action)。
设若要利用类似第陆节中的index.php/moduleName/actionName格局,则要在config.php文件里设置DISPATCH_ON为true;
同时,也只有打开了此意义后,U奥迪Q5L_MODEL的安装才会使得。
(在地点的章节大家聊起过,能够安装U福睿斯L_MODEL为二来选取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’=>’12345陆’,// 填写您总是数据库的密码
  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的调试模式。

留神三:第陆节 CUOdysseyD知识之1 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”。
1旦您的数量表字段名不是私下认可的,那么须求内定,例如
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版的填充条件改为壹 新增 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. $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目录
OLacrosseG 代表第3方共用类库 即ThinkPHP/Lib/O福特ExplorerG目录
@ 代表当前项目类库,例如Import(“@.Action.xxxAction”)
—-即Myapp/Lib/Action/xxxAction.class.php
@指的是当下项目名称,那和使用Import(“Myapp.Action.xxxAction”)是千篇一律的。
TP的预订是Think、OQX56G等导入的是以连串(TP)基类库为相对早先目录,不然就觉着是项目(Myapp)应用类库为发轫目录。
留意1 运用时要专注文件名的轻重写
只顾2Import会自动将.转换为/,要是文件名中含有.,则要将.改为#才能健康导入。
留意三 导入的类公事后缀暗中认可是.class.php

2 第1方框架类库导入:vendor($class,$baseUrl = ”,$ext=’.php’), 初始目录统1是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/’,二,’数据增进成功!’);
    1.         }else{
    1.             exit($Form->getError().’ [ <a
      HREF=”javascript:history.back()”>返 回</a> ]’);
    1.         }
    1.     }
  10. }//类定义 end

  11. ?>

复制代码

代码补充解释:

select($options=array());

为了便利查看数据,index操作中央银行使到了一个中央查询办法

tdweb语:select()方法代替了前头比较盛行的findAll(),不传任何参数则是得到全体数码。

大家仍是稳中求进,具体有关查询的方法会在动用的时候6续壹起念书。

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

复制代码

也足以安装参数
dump($要出口的变量, 是还是不是直接打字与印刷0或1,变量表达 ,
是不是以正规数组情势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/’,2,’数据拉长成功!’); 跳转函数。
函数原型:redirect($url,$time=0,$msg=”)
看参数就已经很了然了。

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

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

 

 

  1. protected $_auto  =  array(
  2. array(‘password’,’md5′,’ADD’,’function’),
  3. );
public function testdb(){        $obj=M("User");      dump($obj);  }

打听这个理论后,大家先不难实际操作一下这几个文化。

运用TP以表单提交数据到库,流程和您所精通的表单提交未有何分别,只是TP简化了数据操作的处理进度。
我们在实操中体会一下。
先来看望大家所定义的多少表form的字段:

 

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

  11. ?>

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

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

若果您的服务器环境扶助rewrite,使用
    此后大家的求学中用到的U奥迪Q叁L,都以借使你选用了rewrite的景观。

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

模型:ArticleModel.class.php:

由于大家说的是渐进,所以我用步骤式来证实,只要一步一步跟着做,相信聪明的您在选用进度中就会掌握TP的施用了。

2  模型对象:即数据对象,你项目里每二个Model类文件都会对应着二个数据表(可能视图),模型与数码表存在壹种炫耀关系。TP约定了命名要遵守一定的规范,若是不切合,则需求遵照事态开始展览额外的对应设置。例如Model类的tableName属性

三.查询语言

入口文件:你能够理解为那么些类别的唯壹1道门,未来全部的操作都会经过那道门去实施拍卖。
无需理会什么看头,你还是能先把它当做是index.php正是进口文件

1般的话,在表中添加多少都以因而表单来建立,为了更加直观地球科学习CUCRUISERD中的C,大家接下去建立个表单来进展添加数据的操作。
以前大家已在Myapp/Lib/Model/下建立好FormModel.class.php类—-模型(M)
再者也在Myapp/Lib/Action/下添加了一个Index应用模块和写下了3个index操作—-控制器(C)
同时在Tpl目录下建立了与之对应的模板目录Index及index.html模板文件 ——-视图(V)
MVC形式的支出已反映了出去。
澳门新萄京,tdweb曾不难地包罗了TP中那叁者的关系,

 

复制代码

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

 

在意:以下的步子,仅仅是TP灵活的陈设格局之中1种,实际支出中得以依照本身的情形去重新设定。
关于为啥那么做,大家会在最终再作计算,笔者以为先实操然后再展开求证比较便于驾驭。以下不再另行解释。

复制代码

另2个例子:

复制代码

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

控制器:IndexAction.class.php:

复制代码

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

__URL__/add 代表方今控制器的 add 动作。

第四节 CUCR-VD知识之1 C 创制(create)

在第一节时,曾略为涉及Model类文件命名,现在再回顾一下那部分的剧情:
咱俩前面在数据库中,已创建了3个think_form数据库表,并且在布置文件config.php中,我们定义了数据表的前缀是think_,
模型类(Model)文件的命名规则是:

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

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

  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("数据删除失败");          }      }  }

.htaccess.rar (248 Bytes)

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

澳门新萄京 1澳门新萄京 2

复制代码

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

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

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

此框架的无敌超出作者的意外,它的ROR真是强,还有内置的CRUD,比JAVA的框架更智能。

澳门新萄京 3

复制代码

支出进程中,只要简单地定义好与数据表对应的模型类(xxxModel.class.php),就足以拓展对数据操作了。
如何让那么些模型支撑电动验证,自动填充,自动过滤那么些知识,在下边涉及到时会作相应讲解。

 

假使输入文件不是在服务器的根目录,而是在myapp目录下,那么入口文件地点就是Myapp/index.php,此时地方的U昂科拉L访问就相应要换来

  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. ?>
class IndexAction extends Action {          public function article(){        $obj=D("Article");      $rows=$obj->select();                  dump($rows);     }  }

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

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

澳门新萄京 4澳门新萄京 5

叠加知识点:
    去掉URL里面的index.php
    要去掉U奥迪Q五L里的进口文件index.php,使U揽胜极光L类似这样的款式 
 
    能够按法定手册所提供的格局实行如下操作。
    一 承认httpd.conf配置文件中加载了mod_rewrite.so模块
    2 AllowOverride None 将None改为 All
    三 打开Myapp/Conf/config.php文件,在计划的数组中添加1行:
    ‘URL_MODEL’=>2,
    在输入文件所在的同级目录下,新建二个.htaccess文本,内容是

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

 

Data文件夹:TP会把项目标数据库表字段生成到那边,别的。。。那一个先不必理会。

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

 

复制代码

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

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

复制代码

发表评论

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

网站地图xml地图