26
2019.2
定义控制器
作者: POPASP
每个模块都应该对应一个控制器文件,应用开发中的一个重要过程就是给不同的控制器定义具体的操作。一个应用如果不需要和数据库交互的时候可以不定义模型类,也可以不用定义Action控制器,控制器一般位于项目的Controller目录下面。
控制器的定义非常简单,例如:
```brush:vbscript
Class User
```
控制器文件的名称是Use.asp,需要注意的是2.3版本之前使用的名称是UserAction.class.asp,目的同样是为了简化操作。
如果我们要执行下面的URL
```brush:xml
http://localhost/App/user_add.asp
```
则它对应的是`User`控制器的`add`方法
因此增加一个add操作方法就可以了。
```brush:vbscript
<%
'用户模块
Class User
' 定义一个add操作方法
public sub add()
'准备相关数据
end sub
end Class
%>
```
操作方法必须定义为Public类型,否则会报错。方法可以是Sub过程也可以是Function函数,但不能有参数。
尽管从2.3版本之后控制器文件名与控制器定义得到了极大的简化,但是本质上并没有太大的变化,因为框架并不会直接调用用户自定义的控制器,而是先将控制器代码重写后再进行调用。比如上面定义的User控制器,实际上重写后的代码如下:
```brush:vbscript
<%
Class [UserAction]
Public that,parent,son
' 定义一个add操作方法
public sub add()
'准备相关数据
end sub
end Class
%>
```
这个重写后的类可以在Runtime/Class/UserAction.class.asp中可见。
这里我们要说明一下that属性,它是POPASP_CONTROLLER的实例化。它的常用方法有
* Verify
* u
* Assign
* expired
* isGet
* isPost
* isAjax
* isSelfOrigin
* getReferer
* getOrigin
* Redirect
* Get
* Form
* server
* AjaxReturn
* Error
* Success
* Err
* Suc
* rs2dict
* Check
* asp_check
* js_check
* js_auto
现在我们先来学习几个常用方法
### that.Get ###
功能:与Request.QueryString作用相同,用来获取地址栏中的参数,其实就是`Request.QueryString`的一个简写。
```brush:vbscript
'等价于Request.QueryString,也等价于POP_MVC.Get("")
that.get("")
'等价于Request.QueryString("name"),也等价于POP_MVC.Get("name")
that.get("name")
```
### that.Form ###
功能:与Request.form作用相同,用来获取form表单提交的数据,其实就是`Request.form`的一个简写。
```brush:vbscript
'等价于Request.Form,也等价于POP_MVC.Form("")
that.Form("")
'等价于Request.Form("name"),也等价于POP_MVC.Form("name")
that.Form("name")
```
### that.Server ###
功能:与Request.ServerVariables作用相同,用来获取系统变量,相当于`Request.ServerVariables`的简写。
```brush:vbscript
'等价于Request.ServerVariables("SCRIPT_NAME"),并没有POP_MVC.Server这个方法
that.Server("SCRIPT_NAME")
```
### that.Redirect ###
功能:实现页面的跳转,类似Request.redirect
```brush:vbscript
'等价于Request.redirect("login.asp")
that.redirect("login.asp")
'等价于Request.redirect("http://www.popasp.com")
that.redirect("http://www.popasp.com")
'返回浏览器的上一个页面
that.redirect("")
```