ThinkPHP框架记录教程Php

印迹发布于:2019-11-22 932

目录布局

/index.php  /入口文件
/ThinkPHP   /框架目录
Conf/
Convention.php 默认(管理)配置
/Public/浏览器可以直接请求的静态资源目录
/Application/应用程序目录
Common/公共模块
Conf/公共配置,对于所有的平台都起作用
Config.php
Runtime/运行时生成的文件
Home/前台
Back/后台
Conf/当前平台配置配置
Controller/控制器
Model/模型
View/视图

配置修改

动作方法名后缀

配置项:action_suffix

默认(管理)配置:
修改application/Common/Conf下的配置文件(convention.php):  'ACTION_SUFFIX'=>'Aaction';//操作方法后缀
之所以定义在在Common的配置文件中,表示,不论任何模块内的动作名,都使用Action作为后缀!
配置数据库服务器信息
在:application/Common/Conf或者application/Back/Conf
通用或者当前模块的配置文件中,完成对数据库服务器信息的配置。
URL后缀

模板的使用
{}数据输出
__PUBLIC__
替换为Public目录地址!
在模板被编译时,自动替换!
建议在写URL路径时,使用该占位符完成URL路径的定义!

<foreach>
属性:
Name=“变量名”
表示:遍历的变量,通常是数组
Item=”变量名”
表示:每当遍历得到一个元素,赋值的变量
例如:
<foreach name="list" item="row">
相当于
Foreach $list as $row
模板继承,extend,block,建议
继承,重写两个概念
出现在模板层面上的。
布局模板(基础模板)
建立布局模板(基础模板)。(基类父类)
在基础布局模板中,使用block标签,表示该位置可以被重写的。
语法如下:
子模板(控制器中,display的模板)
使用:
Extend标签,来表示所继承的布局基础模板
子模板,使用同名的block标签,重写,父模板中同名的block内容:

继承&重写
模板:子模板继承自布局(基础模板)。(类)
block块:子模板中的block块重写布局(基础模板)的block块。(方法)
模板载入,include
Include标签可以完成模板载入
使用file属性,表示对于的模板页!
布局模板,layout,{__CONTENT__},不建议
提供基础的布局模板(类似于模板继承的父模板),在布局模板中,提供一个占位符。__CONTENT__
子模板,来使用该布局模板。
采用直接替换机制。
相当于,只有一个block块的模板继承方案!
站在:大多数框架的角度(例如:laravel),流行的模板继承,建议使用模板继承。

模型的使用
PDO
Undefined const PDO::MYSQL_ATTR_INIT_COMMAND
ThinkPHP底层的DAO(数据访问对象),分装PDO来实现的。
要求,开启pdo_mysql支持:
Apache httpd restart!
\Think\Model类,定义在:
M(),获得基础模型单例
定义于框架中,公共函数库的一个函数。
M,用于获取模型类的单例对象的!
该方法执行时,需要当前模型名作为参数(通常模型名,就是表名,采用首字母大写的命名方法)
所说的模型类:M函数,获得是 \Think\Model 模型基础类的对象。
对应的CategoryModel称之为自定义模型类。
使用M函数的原因:框架提供的基础模型类已经足够完成表的常规操作了。
语法上:
M定义在全局命名空间的。
更合理的语法应该是 \M();
为什么直接写函数名时OK的?
因为,函数,首先会在当前命名空间查找,如果没有,则会去全局(根)命名空间查找!(这个特性仅仅适用于函数)
自定义模型
需要模块的Model目录,创建独立的模型类文件!
D(),获得自定义模型
使用方法与M()一致,但是会优先尝试实例化自定义模型。
D(“Category”),
先:new CategoryModel
如果自定义模型不存在,则会退而求其次,实例化基础模型:
再:new Model;// M(‘Category’)
$model->create()创建数据
该方法,用来创建数据(对象),用来将数据关联到当前的模型对象上。
测试结果:
Create前:
Create后:
除此之外,create还会执行很多额外的操作:例如:数据验证,自动完成,等!
语法上:

Create()方法,应该接受一个关联数组,作为参数。典型情况,数据来源于POST数据,create会自动查找!
建议:尽可能将表单的form元素的name设置为,数据表字段一致,ThinkPHP自动处理的越多!额外十分有用的操作
除了将数据与对象关联上之外:还可以执行很多额外的操作:
如图所示:

步骤

说明

返回

1

获取数据源(默认是POST数组)

 

2

验证数据源合法性(非数组或者对象会过滤)

失败则返回false

3

检查字段映射

 

4

判断数据状态(新增或者编辑,指定或者自动判断)

 

5

数据自动验证

失败则返回false

6

表单令牌验证(防止表单重复提交安全选项)

失败则返回false

7

表单数据赋值(过滤非法字段和字符串处理)

 

8

数据自动完成

 

9

生成数据对象(保存在内存)

 

      字段映射
为了解决,表单中元素的name属性值,与数据表中字段名称对应不上的情况。
Form
Input name=”title”
Table
Subject varchar(24)
$_POST[‘title’]

判断数据状态
判断当前需要执行的是插入,还是更新!
自动判断:90%,依据是否存在主键,判断是否是更新或插入。存在主键则为更新,否则为插入!
认为干预:向$model->create()传参。第二个参数为人为决定的状态,两个值:
Model::MODEL_INSERT
Model::MODEL_UPDATE
自动验证,重点
验证数据的合法性。
自动在:
允许用户,自定义验证规则,在调用create时,利用用户定义的规则,完成数据的合法性校验!
操作上的核心:在于定义验证规则。规则定义在,模型中!
通常,需要通过自定义模型,完成规则的定义:
格式如下:
二维数组,每个一维数组元素,就表示一条规则:格式如下:
array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
验证字段:
验证规则:
错误提示:
此时调用create时,该验证规则自动完成!
如果规则定义在自定义模型上,则需要使用D()函数来获得自定义模型:
Create()方法一旦验证失败,返回false。
同时使用模型的getError()方法,返回错误信息。

验证规则
关于自动验证规则的定义,分两套语法:
常见规则(基本规则)和附加规则(扩展规则)
常见规则:通常使用前三个元素即可即可
附加规则:至少需要使用第五个参数。通常使用第二个参数配合第五个参数使用,第五个参数表示哪种规则,第二个参数表示该规则的选项。
常见规则
Require,必须
url,URL
number:数字,相当于int unsigned! 0, 正整数!
扩展规则
Length:长度,需要提供长度范围
Unique: 唯一
Regex:正则,需要提供正则表达式
Between:是否在某个范围内,需要范围
Confirm,判断两个字段是否相等。需要比较的元素名。
通过自定义函数(方法)来设置规则:
Function: 函数
Callback:当前模型类方法

验证条件
当数据出现那种情况时,才会验证:支持:
三种情况:
存在才验证:0,MODEL::EXISTS_VALIDATE
必须验证,不论是否存在:1,MODEL::MUST_VALIDATE
值不为空时,才验证。2, MODEL::VALUE_VALIDATE

多字段验证
默认情况下,不支持多字段验证。一旦检验出来某条规则出错,则自动退出!
如果需要将所有的规则都检验出来,再返回错误消息,就应该设置批量验证字段:
此时,一旦出错,错误消息就使用数组表示:
每个元素就是错误消息:
字段=>消息
通过拼凑错误消息,可以展示所有内容:
表单令牌验证
防止表单重复提交安全机制!表单数据赋值
用于过滤非法字段!
数据自动完成,重要
为字段设置默认值,通常使用在插入,或者是自动更新的某些字段上。
例如:update_time 表示更新时间!
需要在定义模型上,定义属性:
$_auto; 完成!
生成数据对象
将数据与模型对象关联!
$model->add()增
形成insert语句,完成添加!
通过模型的fetchSQL方法,获得所拼凑的SQL,用于调试!
执行fetchSQL时,不会真正执行insert语句的,用于调试!
语法上:thinkPHP使用了大量的连贯操作语法形式!
一个对象调用方法后,再调用方法:
$result_add = $m_category->fetchSql(true)->add();
实现:仅仅需要fetchSQL()返回对象即可!
最终的返回值为最后一次调用的返回值!
$model->add()返回值为:最新生成的自动增长ID!
$model->find()查一条
查找一条,通常利用主键查询
$model->select()查列表

$model->where()->order()->limit()->select()

检索符合条件的所有数据
支持再此之前,通过连贯操作,对查询进行设置。

Select * from table-name where $cond group by $group having $having order by $order limit $offset,$limit;
$model->order()

排序的方法
$model->delete()删
根据条件或者主键进行删除
如果没有主键,利用条件的话:使用where()作为连贯操作

$cond['id'] = 10;
$m_category->where($cond)->delete(); 
$model->save() 更新

完成更新的操作!

$model->limit($offset, $pagesize)

拼凑select语句的limit部分!

$model->page($page, $pagesize)

对limit 封装,page内,自动算$offset = ($page-1) * $pagesize;

$model->count();

用于获符合合条件的记录数
可以通过where连贯操作,提供条件

$model->where()->count(); 
$model->where()

配合:查询,删除,更新来使用
$cond

$model->where($cond)->select();
$model->where($cond)->delete();
$model->where($cond)->save();

其中条件的写法,有两种:
之一:字符串:
Id>10
之二:数组,建议。强烈建议。1,数据安全性更容易被保证。2,其他的框架都这样。

$cond[‘id’] = array(‘gt’, 10);

写法如下:
典型写法:

$cond['字段名'] = array('表达式','查询条件');

表达式就是运算符:
表达式含义协助记忆

EQ 等于(=) equal
NEQ 不等于(<>) not equal
GT 大于(>) greater than
EGT 大于等于(>=) equal or greater
LT 小于(<) less than
ELT 小于等于(<=) equal or less than

LIKE 模糊查询

[NOT] BETWEEN (不在)区间查询
[NOT] IN (不在)IN 查询

EXP 表达式查询,支持SQL语法expression

例如
空数组
大于:
In
Between
Like:自动转义!
多个条件的情况,增加多个元素即可!
条件间为:AND 的关系。
如果需要修改为OR 逻辑关系,需要使用:
非单一的逻辑关系,混合的逻辑关系:

_complex(复杂)

默认的,如果字段对应的是一个具体指,就表示等于关系

$cond[field] = 10;
$cond[field] = array(‘eq’, 10);

ThinkPHP的跳转
使用控制器的跳转方法完成:
一下两个方法,都定义在基础的控制器类中:

\Think\Controller
$this->success();

成功后的跳转
需要的参数:为提示信息,和目标URL
$this->error();
失败时跳转:
需要的参数:提示信息,和目标URL
URL处理
基础模式
通过get参数,m,c,a表示分发参数!
为了搜索引擎,或者用户,优化URL,更加简洁,更加容易记,更加美观,更加具有逻辑含义。
ThinkPHP采用默认的pathinfo的模式,形式使用/分割不同的参数:

Pathinfo模式
ThinkPHP默认的URL模式

URL后缀
在URL上,增加任意的后缀,表示不同的格式:
默认的后缀就是html
可以被配置的:
通过增加配置项:
\U()
在ThinkPHP中,建议(强烈建议)所有的URL,都使用该函数生成。原因是在ThinkPHP中对对URL存在很多配置:例如,URL模式,URL后缀!

U(‘Module/Controller/action’, array(p1=>v1, p2=>v2))

参数一:分发参数
参数二:get参数数组
使用函数,可以自动生成符合ThinkPHP规范的URL。
如果需要在模板中,生成URL,则需要使用:

{:U()}

在函数前写 : 表示该位置调用函数的意思!

不仅仅对应于U函数,所有的函数都可以这么调用!

浏览器输入数据的处理

I()

获取请求数据

I(‘post.key’);
$_POST[‘key’]
I(‘get.key’);
$_GET[‘key’]
I(‘get.key’, ‘default_value’)
Isset($_GET[‘key’]) ? $_GET[key] : ‘default_value’

配置系统

C(‘KEY’)

获取KEY对应的配置项的值

如果是用户自定义的配置项,需要在配置文件中,定义好才可以!

分页实现

数据

$model->page()
$model->limit();

翻页

利用系统提供的翻页类:

Pathinfo
是URL的一部分。
一个典型的URL如下:
http://blog.65v.net:8888/path/to/script.php/module/controller/action/k1/v1/k2/v2.html?p1=v1&p2=v2#tag
协议:http
域名:blog.65v.net
端口:8888
脚本路径:/path/to/script.php
pathinfo:/module/controller/action/k1/v1/k2/v2.html
请求参数(查询字符串,query string):p1=v1&p2=v2
锚点:#tag
其中:脚本与查询字符串间的部分称之为pathinfo!
任何web程序,都可以获取到pathinfo的:
例如:PHP,

$_SERVER[‘PATH_INFO’];

ThinkPHP程序中:通过获取到的pathinfo字符串,进行分析,判断当前的分发参数:
由:ThinkPHP的分发类完成:\Think\Dispatcher


http://www.virplus.com/thread-365.htm
转载请注明:2019-11-22 于 VirPlus 发表

推荐阅读
最新回复 (0)

    ( 登录 ) 后,可以发表评论!

    返回