文章目录
  1. 1. ThinkPHP学习总结
    1. 1.0.0.1. 比如想写一个formrow,如果直接使用html写的话,写法如下:
    2. 1.0.0.2. 采用模板写法如下:
  2. 1.0.1. View层包含的为html代码,并可以直接使用已存在的模板。
  3. 1.0.2. Controller层和Model包含的为php代码。
  4. 1.0.3. ThinkPHP新手,尤其是没有学过PHP的新手容易疑惑的几个地方:

ThinkPHP学习总结

最近工作需要,要用PHP写目前项目的后台,因为之前一行PHP代码都没写过,只能从头开始读代码,找了个框架,thinkPHP,现将从零开始学习的心得分享如下。

thinkPHP框架概况

├─ThinkPHP.php     框架入口文件
├─Common 框架公共文件
├─Conf 框架配置文件
├─Extend 框架扩展目录
├─Lang 核心语言包目录
├─Library 核心类库目录
│  ├─Behavior 核心行为类库
│  ├─Core 核心基类库
│  ├─Driver 内置驱动
│  │  ├─Cache 内置缓存驱动
│  │  ├─Db 内置数据库驱动
│  │  ├─TagLib 内置标签驱动
│  │  └─Template 内置模板引擎驱动
│  └─Template 内置模板引擎
└─Tpl 系统模板目录

基于thinkPHP做二次开发的时候主要使用的Library目录下Driver的东西。也有可能使用Template,写到/Taglib里面,定义自己的模板类。利与开发。

比如想写一个formrow,如果直接使用html写的话,写法如下:

<div class="formitm">
   <label class="lab">title</label>
      <div class="ipt">content<p class="help-block">tip</p></div>
</div>

采用模板写法如下:

新建一个文件MyTpl.class.php

public function _formrow($tag,$content) {
    $title      = $tag['title'];                //标题
    $tip      = $tag['tip'];                //提示信息
    $html = '
    <div class="formitm">
        <label class="lab">'.$title.'</label>
        <div class="ipt">
            '.$content.'
            <p class="help-block">'.$tip.'</p>
        </div>
    </div>';
    return $html;
}

以后可以直接使用下面的字段达到上面的效果。

<MyTpl:formrow title="" tip="" ></admin:formrow>

本质是一个映射的思想。使程序结构更清晰,代码更简洁统一。

以实例叙述,Demo如下:
首先你创建新的文件夹应该包含如下几个文件夹:

├─View        表示层
├─Controller  控制层  use Think\Controller
├─Model       数据层  use Think\Model
├─Conf        配置文件
├─index.html  默认的入口index.html文件
├─Common      非必要,但是可以将公用的文件放到这里面

View层包含的为html代码,并可以直接使用已存在的模板。

  • 需要提交的数据直接写在form表单里面,action后写接收响应的Controller,使用方法U定位地址。比如{:U()}指提交到了本地,{:U(“admin/getInfo”)}就是提交到admin文件里的getInfo方法。
  • 值得注意的是,在这里不需要写Controller,是因为U方法会自动解析,直接定位到adminController方法中去,所以真正的物理文件命名不应该是admin,而是adminController,
  • 关于View层其他的不再过多叙述。
    Controller层为逻辑控制层,负责MV之间的沟通。
    Modle层是数据持久层。
    MVC模式在ThinkPHP中的数据交互主要通过_POST Request,鉴于PHP中前端的_POST请求可以在任何地方被捕捉到。所以MVC通信过程中只需要调用方法,不需要传递数据。


Controller层和Model包含的为php代码。

  • Controller层主要是对方法的调用,包含了大量的工程中绝大部分的逻辑代码。当调用Model时使用使用方法M定位地址。具体用法与上文U类似。
  • Model层不需要编写真正的sql语句,CURD都已经封装的很完备。用如下语句进行举例。

      $this->table("__CONTENT__ as A")
                  ->join('__CONTENT_ARTICLE__ as B ON A.content_id = B.content_id')
                  ->join('__CATEGORY__ as C ON A.class_id = C.class_id')
                  ->where($where)
                  ->order($order)
                  ->count();
    

    选定table,thinkPHP的格式为_table名称_,如 table("__CONTENT__ as A")即选择了数据库中名为CONTENT的table。可以根据自己喜好添加where,order等语句,不添加默认为空。

    需要注意的是 ThinkPHP在执行table以后,关于CURD的操作就缺省针对于之前的那个table,不再重新选择。而且如果不做映射处理的话,默认_POST里的字段名与table中的字段名是相同的,即KEY-VALUE在table中和_POST中是一致的。

    关于这部分,剩下的不再叙述。

    ThinkPHP新手,尤其是没有学过PHP的新手容易疑惑的几个地方:

    数据去哪了?如何获取到的数据?

      首先,在PHP中_POST请求可以在后台的任何地方接收到,action只是选定了提交form表单后执行哪个类,并非把数据提到到了这个类里面,其他类不可以使用。
      其次,在thinkPHP的MVC层中,如果不做自定义的映射处理,默认前台form中的{name,value}直接对应数据库中table的{key,value}。所以在数据form激发action的时候就数据已经送达到了后台的每一个地方,无论Controller还是Model都可以使用。
    

    thinkPHP伪静态的具体效果,如何根据url解析到目的地址?

      thinkPHP采用了伪静态效果,伪静态有利于搜索引擎的收录,能够增加网站的优化效果。而且跟人觉得用户友好度较好。    至于如何根据url解析到正确的目的地址,以如下代码示例。
      比如url:http://serverName/index.php/Blog/read/,就定位到Blog这个文件下read方法了。
      比如方法如下:
          public function read($id=0){
              echo 'id='.$id;
           }
       则访问后会显示0.
    

    值得注意的地方是read($id=0)里面给id一个缺省值,如果没有这个缺省值,则访问时会报错。如果在/read/后加参数,比如http://serverName/index.php/Blog/read/5,则显示5.

    其实也可以开启路由功能,自定义url解析规则,自己定义url的写法。这里不详细展开。

文章目录
  1. 1. ThinkPHP学习总结
    1. 1.0.0.1. 比如想写一个formrow,如果直接使用html写的话,写法如下:
    2. 1.0.0.2. 采用模板写法如下:
  2. 1.0.1. View层包含的为html代码,并可以直接使用已存在的模板。
  3. 1.0.2. Controller层和Model包含的为php代码。
  4. 1.0.3. ThinkPHP新手,尤其是没有学过PHP的新手容易疑惑的几个地方: