概述

在前面的文章中我们学习了如何编写一个简单的基本的插件,也编写了一个简单的页面访问IP地址位置记录插件。有时候我们需要自己插入数据这时候我们发现不知道怎么才能实现根据编辑框内容插入数据到数据库,今天我们就来学习插件中的FORM表单。其实FORM表单我们第一篇文章的时候讲到过了但没有具体讲今天我们就来具体讲讲FORM。

一、Typecho_Widget_Helper_Form对象

这个对象呢是Typecho自己的一个FORM接口用于我们编写FORM表单的。
下面的代码是实例化对象

1
2
$form  = new Typecho_Widget_Helper_Form(action,method,enctype)
//这个实例化接受三个参数action我们待会在讲,method是提交的方式GET或者POST两种方式,enctype是编码方式这里,第一个参数是必须填的其余两个默认是get和application/x-www-form-urlencoded

下面是该对象的一些基本的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//设置表单编码方案
setEncodeType(enctype)

//增加输入元素,这个方法用于添加form表单的input标签元素
addInput(input)

//获取输入项,根据name获取表单
getInput(name)

//获取所有输入项的提交值
getAllRequest()

//设置表单提交方法
setMethod(method)

//设置表单提交的目标action
setAction(action)

//获取此表单的所有输入默认值
getValues()

//获取此表单的所有输入项
getInputs()

//获取提交数据源
getParams(params)

//验证表单
validate()

//把表单以html形式打印出来
render()

二、Action概述

其实action和我们自己编写的PHP接口差不多用于把表单数据提交到当前action进行执行返回数据其实我们也是可以自己编写php让表单提交到我们自己的PHP中但是这里有个问题如果需要使用数据库的话是没办法使用Typecho自带的数据库处理器的,所以Typecho提供了一个Action用于处理数据。
Action需要实现Widget_Interface_Do接口函数
在Typecho中的Helper助手类给我们提供了一个方法用于添加Action的

1
2
Helper::addAction(actionName,widgetName);
actionName是我们需要映射的名称,widgetName是我们自己编写的Action对象,这是一个静态方法所以我们不用去给他实例化

三、Typecho_Request对象

这个对象是Typecho用于Action处理的一个对象下面是常用的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//这是个静态方法用于获取Typecho_Request对象
getInstance()

//获取url前缀
getUrlPrefix()

//判断是否为https
isSecure()

//设置过滤器
filter()

//获取实际传递参数,key是参数的键,default如果没该键的话就使用这个参数的值,这个参数可以不填默认是NULL
get(key,default)

//从参数列表指定的值中获取http传递参数,params可以是数组也可以是单个字符串这个值是参数的键用于获取对应的值如:http传过来id=1则from('id')注意的是这里不管你传的是array还是字符串都是返回array
from(params)

//设置参数的键值,key是参数的键,value是值用于给请求设置参数
setParam(key,value)

//设置多个参数,这个和上面那个是一样的只不过这个可以传入关联数组设置多个参数,上面的只能设置一个参数
setParams($params)

//获取请求的根目录
getRequestRoot()

//获取当前请求url
getRequestUrl()

//获取请求地址
getRequestUri()

//获取根url
getBaseUrl()

//设置User-Agent
setAgent()

//获取User-Agent
getAgent()

//设置来源页
setReferer()

//获取来源
getReferer()

//判断是否为get方法
isGet()

//判断是否为post方法
isPost()

//判断是否为put方法
isPut()

//判断是否为ajax
isAjax()

//判断是否为flash
isFlash()

//判断是否手机客户端
isMobile()

//判断输入的参数是否满足要求,如我要判断参数的id是否等于1则is('id=1')
is()

//根据当前uri构造指定参数的uri,比如我给当前url附加id参数则可以makeUriByRequest('id=1');

//根据当前uri构造指定参数的uri和上面的一样不过这个可以传入关联数组设置多个参数
makeUriByRequest($paramter)

四、Typecho_Response对象

Typecho_Response和Typecho_Request对象一样都是用于服务的但Typecho_Response用于响应结果的,下面是常用的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//用于获取Typecho_Response对象的静态方法
getInstance()

//设置默认回执编码
setCharset(charset)

//获取字符集
getCharset()

//在http头部请求中声明类型和字符集
setContentType()

//设置http头
setHeader(name,value)

//设置HTTP状态
setStatus(code)

//重定向函数lcoation是需要重定向的路径而isPermanently是是否重定向
redirect(location,isPermanently)

//返回上一个页面
goBack()