03 04 2015

ThinkPHP框架:MVC框架
Model:模型
View:视图
Controller:控制器

优点:
1、代码分工更加明确
2、便于网站的维护与管理、便于二次开发

ThinkPHP特点
1、轻量级
2、集成Smarty(显示与逻辑相分离)
3、重写了Smarty标签(ThinkPHP标签)
4、项目目录自动生成
5、国内程序员


ThinkPHP2.x:Smarty2.x、PHP5.0-4
ThinkPHP3.x:Smarty3.x、PHP5.3-4、命名空间

项目目录
library------------------第三方资源包
  ThinkPHP
  jquery
  kindeditor
application--------------应用程序
  Common-----------------公用函数库
  Conf-------------------当前项目配置文件夹
    config.php-----------当前项目配置文件
  Lang-------------------语言包
  Lib--------------------控制器、模型
    Action---------------控制器
    Model----------------模型
  Runtime----------------运行时文件
  Tpl--------------------视图目录
    default--------------主题目录
public-------------------公用文件
  css
  images
index.php----------------入口文件(引导文件)

 

配置文件
1、当前项目的配置文件
/项目/application/Conf/config.php
2、全局的配置文件
/项目/library/ThinkPHP/Common/convention.php

运行机制:
当程序运行,要读取配置文件中的内容时
先到config.php中寻找指定的配置信息
1、如果config.php有配置信息,不再找convention.php
2、如果config.php没有配置信息,再找convention.php


控制器的命名规则
1、必须采用大驼峰的命名规则
2、必须以Action.class.php结尾
文件名:IndexAction.class.php   类名:IndexAction
文件名:LoginAction.class.php   类名:LoginAction


控制器中方法的命名规则
1、方法名全部小写


控制器定义的语法格式
class XxxAction extends Action
{
  public function xxx()
  {
 逻辑代码;
 $this->assign(key,value);
 $this->assign(key,value);
 $this->assign(key,value);
 $this->display();
  }
}

视图文件的目录结构
Tpl
  default
    控制器(文件夹)
      xxx.html
    控制器
      xxx.html
注意:控制器的文件夹名必须注意大小写
      与控制器名完全一样


display用法:
1、$this->display();
到当前控制器的文件夹下找当前方法名的.html文件
2、$this->display("xxx");
到当前控制器的文件夹下找xxx.html文件


ThinkPHP标签注意:
1、所有的<>标签,必须都是双标签
2、只有输出值的时候用的是{}定界符,其他的标签都是<>定界符
3、只有输出值、if标签调用键名时用$,其他标签调用键名都不加$


ThinkPHP标签
1、显示某一变量值
{$key}
2、显示数组中的某一个值
{$key.数组的下标}
3、比较标签
lt 小于
gt 大于
elt 小于等于
egt 大于等于
eq 等于
neq 不等于
heq 衡等于
nheq 衡不等于
4、if标签
<if condition="条件">
  html内容
<elseif condition="条件"/>
  html内容
<else/>
  html内容
</if>
5、switch标签
<switch name="key">
  <case value="值">html内容</case>
  <case value="值">html内容</case>
  <case value="值">html内容</case>
  <default/>html内容
</switch>
6、foreach标签
<foreach name="key" key="k" item="v">
  下标:{$k}   值:{$v}
</foreach>
7、volist标签
<volist name="key" key="k" id="v">
  循环变量:{$k}  值:{$v}
</volist>
8、php标签
<php>
  php代码;
</php>
9、literal标签
<literal>
  ThinkPHP标签
</literal>
10、include标签
网页的头、脚,放到tpl/default/Public
<include file="Public:xxx" />


__ROOT__不起作用的解决办法
在入口文件中定义如下常量
define("__ROOT__","/项目名称");

系统常量
__ROOT__:项目根目录***
__APP__:入口文件地址***
__URL__:当前控制器的地址
__ACTION__:当前方法的地址
__SELF__:当前的url地址


注意:Public下的文件内容一旦变更后,必须删除一下Runtime目录


模型命名规则
1、必须采用大驼峰的命名规则
2、必须以表名来命名
3、必须以Model.class.php来结尾
文件名:UserInfoModel.class.php  类名:UserInfoModel
文件名:ReviewsModel.class.php  类名:ReviewsModel

模型的定义格式
class 表名Model extends Model
{
  public $tableName = "省略了前后缀的表名";
  public $trueTableName = "完整的表名";
}


注意:M("表名"),表名必须全小写

数据库操作
1、查询多条记录,返回值:二维数组
$model = D("模型名")或$model = M("表名")
$result = $model->select();
$result = $model->where()->select();
$result = $model->order()->select();
$result = $model->limit()->select();
$result = $model->where()->order()->limit()->select()
2、删除记录,返回值:受影响的行数
$model = D("模型名")或$model = M("表名")
$result = $model->delete();
$result = $model->where()->delete();


redirect用法:
1、跳转页面
$this->redirect("控制器/方法");
2、跳转页面,并传参
$this->redirect("控制器/方法/名/值");
$this->redirect("控制器/方法",array(名=>值));
3、跳转页面,并提示信息
$this->redirect("控制器/方法",array(),时间,信息);

注意:
如果Public目录下的文件内容一旦变更后,必须要删除Runtime目录

系统常量
__ROOT__ 项目根目录
__APP__  当前入口文件地址
__ACTION__ 当前方法的地址
__URL__  当前控制器的地址
__SELF__ 当前的url地址

ThinkPHP提供一个分页类
library/ThinkPHP/Lib/ORG/Util/Page.class.php

Common:公用函数文件夹
1、Common文件夹下的文件名固定common.php
2、Common文件夹下只能有一个文件
3、common.php由系统自动加载
4、控制器、视图都可以来调用common.php里的函数
5、common.php内容一旦变更后,必须删除Runtime
作用:对页面的输出结果,进行微调、控制器调用公用函数
使用方法
1、控制器调用
   通过函数名直接调用
2、视图调用
   {$key|函数名}
   {$key,$key...|函数名}
   注意:函数会将前面的所有的$key当做函数的参数


TinkPHP自带的验证码文件
library/ThinkPHP/Lib/ORG/Util/Image.class.php
session中默认的名称:verify

验证码的使用
1、在当前控制器中添加一个方法
public function 方法名()
{
  import("ORG.Util.Image");//包含验证码类
  Image::buildImageVerify();//产生验证码
}
2、视图页面的引用
<img src="__APP__/控制器/方法名">


ThinkPHP的表单验证
1、必须新建一个模型文件
2、表单验证是通过模型来实现的
3、模型中的验证规则
public $_validate = array(
  array("表单元素名","验证规则","提示信息"),
  array("表单元素名","验证规则","提示信息"),
  array("表单元素名","验证规则","提示信息"),
);
4、在控制器的方法中添加如下代码
$对象 = D("模型名");
if($对象->create())
{
  验证通过
}
else
{
  $msg = $对象->getError();//错误提示信息
}


令牌验证:防止远程提交表单
1、config.php有相关的配置信息
2、通过模型执行令牌验证:D()、M()都行
3、通过模型对象执行验证
   $对象->autoCheckToken($_POST);
   true:验证通过
   false:验证失败

ThinkPHP的文件上传
library/ThinkPHP/Lib/ORG/Net/UploadFile.class.php


自学新框架的步骤
1、入口文件
2、目录结构
3、MVC三层的定义格式
4、CURD操作
5、附加功能

 

发表评论