321365体育网投ThinkPHP学习笔记1

 

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

 

 

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


 

在应当模块中,若是有些操作是急需页面呈现的,只要对应在Myapp/Tpl/default/里建立贰个文件夹,文件夹以使用模块的名目来定名,然后在那些文件夹下,建立2个以这么些function名称来命名的html文件,就足以在那几个格局中选取$this->display()方法来直接调用该模板。(当然也足以调用别的模块下的任何模板或显式钦赐模板文件地点和名称,由于是鲁人持竿式的上学,就让大家先忽略吧)

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

  1. array(‘status’,’1′,’ADD’),
$rows=$obj->where("add_user='dee'")->order("add_time desc")->limit(10)->select();

 

 

  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以表单提交数据到库,流程和您所掌握的表单提交没有啥样不同,只是TP简化了数据操作的处理进程。
笔者们在实操中体味一下。
先来看望我们所定义的数量表form的字段:

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

二简约认识项目里的逐一文件夹

  在动用 Java 的开源项目 JeeSite
时,养成了贰个不佳的习惯,习惯给每张表都增多
create_by、create_date、update_by、update_date、remarks 和 del_flag
这么多少个字段。纵然每张表都有那多少个字段,那么对每张表进行 insert
时都会对以上的字段进行设置,对每张表实行 update
时都会对内部一些字段展开立异,对每条记下实行 delete 时都其实是对
del_flag 字段进展
置位。重复操作很多,一些操作方法被涂改。那么,这么些时候就要自定义2个友好的
Model 来作为项目标 基类 了,那几个 Model 就背负干上边笔者说的那么些事情了。

上边首要说说function与callback那五个叠加规则。

 

一  高速起初一个档次

  那样,在大家用 D 方法实例化 TrunkModel 的对象后,使用 add
方法插入数据时,就会先调用 BaseModel 中的 add
方法了,那样大家每张表都有的 create_by 等一二种字段就都会自行获得了。

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

 

Cache文件夹:项目自动生成的模板缓存会产出在这边

 

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

 

 

 

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

add 动作代码:

——————– 基于本学习类别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即UCRUISERL调度成效是关闭的,所以在暗中同意情势下,要拜访Index模块的index操作,地址应是:index.php?m=index&a=index,m指的是模块变量(Model),a指的是操作变量(Action)。
假如要动用类似第④节中的index.php/moduleName/actionName形式,则要在config.php文件里安装DISPATCH_ON为true;
再者,也唯有打开了此意义后,U帕杰罗L_MODEL的设置才会立见成效。
(在上头的章节大家提及过,能够安装U帕杰罗L_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:第伍节 CULacrosseD知识之一 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′),//自动填写的概念规则请参考第5节内容
    填充规则有所不一样,见附注

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

复制代码

或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内建的类库和文件导入的1个函数,具有缓存和检查和测试机制,相同的文书不会重复导入,争辩时会提示错误。使用这措施时,系统会自动识别导入类库文件的职分:
Think 代表TP框架基类库 即ThinkPHP/Lib/Think目录
O科雷傲G 代表第3方共用类库 即ThinkPHP/Lib/O福特ExplorerG目录
@ 代表当前项目类库,例如Import(“@.Action.xxxAction”)
—-即Myapp/Lib/Action/xxxAction.class.php
@指的是日前项目名称,那和采纳Import(“Myapp.Action.xxxAction”)是均等的。
TP的预订是Think、O智跑G等导入的是以类别(TP)基类库为绝对早先目录,不然就认为是种类(Myapp)应用类库为起先目录。
只顾1 用到时要留心文件名的分寸写
在意2
Import会自动将.转换为/,假诺文件名中含有.,则要将.改为#才能符合规律导入。
只顾3 导入的类公事后缀默许是.class.php

2 第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操作中利用到了2个中坚查询艺术

tdweb语:select()方法代替了在此之前相比较流行的findAll(),不传任何参数则是赢得全体数额。

作者们仍是渐进,具体有关查询的方法会在接纳的时候陆续一起读书。

dump($var, $echo=true,$label=null,
$strict=true)
函数。浏览器友好的变量输出。
当唯有3个$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=”)
看参数就已经很理解了。

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

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

 

 

 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     }

便宜纪念性的读书转发了有个别之下小说

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

// 上面包车型大巴写法是一律的

  继承的 BaseModel 的不二法门和接二连三 Model 的不二法门是一模一样的,只是使用 use
引入命名空间到如今效果域时的急需修改为大家的命名空间,而不是再去行使 TP
提供的命名空间。代码如下:

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

浏览器输出:

花色:你要开支的系统,称之为项目。

  定义代码如下:

CU中华VD知识之一 C 成立(create)

//TP 恶补ing... 

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

自定义3个 Model

$Form->create()
动用Model类的Create方法创立八个Form对象,失利会回到false。

2.自定义模型

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

继承我们定义的基类

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

③ 读取数据 select 和 getFiled

  1. $this->display();
1 <?php
2 namespace Admin\Model;
3 use Admin\Model\BaseModel;
4 
5 class TrunkModel extends BaseModel {

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

create() 方法是贯穿操作、CU冠道D 操作的集合 (
包罗数据创造、数据印证、表单验证、自动完结等 )。

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

  use 引入的命名空间是 Admin\Model\BaseModel ,因为大家定义的
BaseModel 的命名空间是 Admin\Model,因为那里的 TrunkModel 和 BaseModel
在二个命名空间下,省去 use 也是可以的。

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

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

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

   ThinkPHP 提供了1个 Model 类,供别的的 Model 实行后续。Model 类中是
MVC 中的模型类,它是调用 持久层
的上层类。感觉那样描述难题重重,但是有怎么着点子吗?但是,这些 Model
有时相当小概满足大家的一对必要,因而我们必要自定义一个 Model
类出来,可是自定义的 Model 同样要继续 TP 提供的 Model
类,而把大家自定义的 Model 类作为大家项目中的 Model
基类。作者怎么感觉小编在说绕口令,等等…我有点晕。

外加规则:叠加规则是指向填充内容而言,表示该内容填充的艺术,包罗function,callback,田野(field),string
对此田野使用其它字段实行填写和string直接标示字符串作为值进行填空很好明白。例如地点

壹 、定义数据表模型

第二节简单精晓TP的模板输出
上一章节我们提及到,

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

 

Data文件夹:TP会把项目标数据库表字段生成到那边,此外。。。那么些先不必理会。

  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>

例2:让 tpk_article 表的内容据书上说客户所在的地区展现当地的信息:

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

1 打开Myapp/Lib/Model/FormModel.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"    }  }

Action:模块控制器类,你权且能够清楚为一个Action文件表示着2个行使模块,Action文件中的每2个主意(function)代表着二个操作,操作分为有出口到模板的操作和只具执行不须要输出的操作。对于有出口的操作,则意味了您的门类中八个显得给用户使用的web页面。(注意:那不是专业的术语解释)

在Model类定义 $_auto
属性,能够形成多少自动处理效果,用来处理私下认可值和别的 onclick=”tagshow(event)”>系统写入字段。
瞩目1:该活动填写恐怕会覆盖表单提交项目。其目标是为了防范表单违法提交字段。
在意2:要动用Model类的create方法制造数量对象的时候才会自行实行表单数据处理。

IndexAction.class.php:

复制代码

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

public function testdb(){        $obj=M("User");      dump($obj);  }
  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. ?>

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

 

第⑤节先河询问ULANDL怎样访问模块操作

复制代码

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

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

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

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

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

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

名词解释:

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

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

复制代码

貌似的话,在表中添加多少都以透过表单来确立,为了更直观地上学CU奥迪Q5D中的C,大家接下去建立个表单来展开添加数据的操作。
前边大家已在Myapp/Lib/Model/下创建好FormModel.class.php类—-模型(M)
还要也在Myapp/Lib/Action/下添加了2个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("数据添加失败");          }      }  }

名词解释:

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


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

模型类的奇异命名还足以智能识别驼峰式的表命名,假若大家有个是相近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("数据添加失败");          }      }  }

开辟浏览器,输入

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

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

前言
TP的手册格外多,其实无须再出这么的贴子,论技术,作者也是菜鸟一个,同时也在读书当中。
看来论坛上多了诸多新对象,不少在抱怨手册看不懂,这自身就姑且一得之见,尝试与新情人们更简便易行地、手把手地进去TP的利用中去。讲解进度中有错的地点,大家扶助指正。

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

 

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

之所从前边大家为think_form数据表在Myapp/Lib/Model目录下创立二个文书FormModel.class.php

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

一旦进口文件不是在服务器的根目录,而是在myapp目录下,那么入口文件地点就是Myapp/index.php,此时方面包车型大巴UOdysseyL访问就相应要换到

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

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

2
在Conf文件夹内,建立2个config.php文件。这几个文件,就是Myapp项目标布署文件。系统会自行加载
config.php文件中的配置是以数组重回方式开始展览定义,会覆盖TP框架中的common目录下convention.php的暗中同意配置。没有安装的铺排,就以暗中认可为准。配置安装能够行使C函数动态改变,临时不必理会。
而笔者辈连接受数据库的装置也是在那么些文件中书写。

复制代码

要测试数据库是还是不是健康连接,最直白的措施便是在现阶段控制器中实例化数据表,然后采取dump 函数输出,查看数据库的链接状态。代码:

1 下载TP1.5正式版

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

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

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

填充字段:就是索要举办拍卖的表单字段,那么些字段并不一定假如数据库表中的字段,对于表单内的支援检查和测试字段比如重复密码和验证码也可以拍卖。
填充条件:ADD | UPDATE | ALL(注意,此是1.5本子表达,1.6已改为1 2
3,后续教程有证实)
当为ADD时,会在新增多少时自动填充,这是暗中认可的处理方式
当为UPDATE时,在更新数据的时候会自动填写
当为ALL时,全数情状下都会议及展览开自动填写

 

摸底那个理论后,大家先简单实际操作一下这么些知识。

近些年可比绕有趣味地读书PHP,看完了有个别基础语法、学会了运用SMALacrosseY模版,继而看了ThinkPHP框架,

模型:ArticleModel.class.php:

  1. $this->assign(‘name’,$value);
  1. protected $_auto  =  array(
  2. array(‘password’,’md5′,’ADD’,’function’),
  3. );

① 创立数量 add()

鉴于岁月关系,此类别联合学习课程更新的速度会相比较慢些,请多担待,上一章节的剧情请看那里。

发表评论

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