• ThinkPHP学习笔记1


    最近比较绕有兴趣地学习PHP,看完了一些基础语法、学会了使用SMARY模版,继而看了ThinkPHP框架,

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

    方便记忆性的学习转载了一些以下文章

    CURD知识之一 C 创建(create)


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

    2  模型对象:即数据对象,你项目里每一个Model类文件都会对应着一个数据表(或者视图),模型与数据表存在一种映射关系。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),就可以进行对数据操作了。
    如何让这个模型支持自动验证,自动填充,自动过滤这些知识,在下面涉及到时会作相应讲解。

    一般来说,在表中添加数据都是通过表单来建立,为了更直观地学习CURD中的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,field,string
    对于field使用其它字段进行填充和string直接标示字符串作为值进行填充很好理解。例如上面

    1. array('status','1','ADD'),
    复制代码

    就是将状态status字段的值直接以1填充.

    下面主要说说function与callback这两个附加规则。

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

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

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

    当使用function作为附加规则时,第二个填充内容就代表了这个因子是一个函数名称,该函数的参数就是代表填充字段的值,比如password的值是123456,则上面的代码会先将这个值使用函数md5('123456'),这样处理后再插入到数据表中去。
    对于function(函数)和callback(回调方法)理论是一样的,只不过一个是表示填充内容所写的是函数名,另一个是表示填充内容是类中的方法名。函数可以是PHP5内置函数或你自己所写的函数。而callback是当前模型类所能调用的一个方法。
    有关数据填充方面的详细资料,请参看官方使用手册 《ThinkPHP数据操作指南》

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

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    2. <html>
    3. <head>
    4. <title>{$title}</title>
    5. </head>
    6. <body>
    7. <form action="__URL__/add" method="post" name="formname" id="formname">
    8.     <p>
    9.            <label for="title">标题:</label>
    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" class="textarea" ></textarea>
    19.     </p>
    20.     <p><input type="submit" value="提交" /></p>
    21. </form>
      </body>
      </html>

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

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

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

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


    1. <?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 HREF="javascript:history.back()">返 回</A> ]');
    16.          }
    17.     }
    18. }//类定义 end
    19. ?>

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

    我们来看看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(); //执行跳转
    就这么简单几行代码,便完成了对数据插入的处理。

  • 相关阅读:
    easypoi添加下拉预选值
    java启动项目字符编码和配置文件的字符编码问题
    leetcode
    leetcode
    leetcode
    leetcode
    事务的隔离级别- 极客时间()
    数据库的事务
    SQL中的视图(极客时间)
    SQL中的连接(极客时间)
  • 原文地址:https://www.cnblogs.com/zhangqifeng/p/1519571.html
Copyright © 2020-2023  润新知