一、控制器操作
1.1、配置控制器方法后缀
"ACTION_SUFFIX"=>"Action"
1.2、事件:处理业务代码的冗余
①、创建事件控制器目录:Event
②、创建 UserEvent.class.php 类
class UserEvent{
public function test(){
echo "当触发测试事件,执行这个方法,这个方法的内容调用";
}
}
访问控制器内部调用事件控制器方法
class UserController extends Controller{
public function test(){
$userEvent = new UserEvent();
$userEvent->save();
}
}
PS:调用别的控制器还可以使用A()方法
$userEvent = A("User","Event");
$userEvnte = A("Admin/User","Event");
1.3、多级别控制器
①、配置允许二级控制器,配置了二级控制器,一级控制器就不能用了
"CONTROLLER_LEVER;=>2
②、在 Controller 目录下创建User目录,在User目录下创建一个控制器
namespace Home\Controller\User;
use Think\Controller;
class UserController extends Controller{
public function index(){
echo "多级控制器";
}
}
1.4、控制器还提供两个特殊的方法,前置方法 _befor_index 和后置方法 _after_index()。
这两个方法,在控制器调用 index() 方法是的时候,一个在之前执行,一个在之后执行。
二、Action 参数绑定
"URL_PARAMS_BIND"=>true //启用 Action 参数绑定,默认为 true
默认的参数绑定是按变量名来绑定的,直接通过 URL 传递参数。
class UserController extends Controller{
public function index($id){
echo "id:".$id;
}
}
URL:http://localhost/demo/User/index/id/5
PS:当你 URL 没有传递参数(id/5)的时候,那么页面会报错:参数错误或者未定义:id。当然,如果取消绑定,则不会报错'URL_PARAMS_BIND‘=>false。但是,为了程序的严谨性,一般不需要取消参数绑定。
有一种顺序传递参数,这个方法可以省略掉键值对中的键,也就是说 id 不需要传递,只需要传递 5 这个值即可。但必须按照多个参数的顺序。
"URL_PARAMS_BIND_TYPE’=>1, //定义按顺序传参绑定
传递两个参数
class UserController extends Controller{
public function index($id,$type){
echo "id:".$id.",type:".$type;
}
}
URL:http://localhost/demo/User/index/5/a
三、跳转与重定向
3.1、success() 和 error()
$this->success("提示信息","跳转的地址","跳转的时间")。
默认情况下,success() 方式是 1 秒,error() 方法是 3 秒。
3.2、模板
① 默认模板
success() 和 error() 方法,跳转的时候就对应了相应的模板,默认如下:
"TMPL_ACTION_SUCCESS"=>THINK_PATH."Tpl/dispatch_jump.tpl",
"TMPL_ACTION_ERROR"=>THINK_PATH."Tpl/dispatch_jump.tpl",
② 自定义成功和错误提示模板页面
"TMPL_ACTION_SUCCESS"=>"Public/success’,
"TMPL_ACTION_ERROR"=>"Public/error’,
③ 对于自定义的提示模板,系统提供一组变量。
变量 | 含义 |
$msgTitle | 操作标题 |
$message | 页面提示信息 |
$status | 操作状态 1表示成功 0表示失败 |
$waitSecond | 跳转等待时间,单位为秒 |
$jumpUrl | 跳转页面地址 |
模板中使用提示变量
操作标题:{$msgTitle}
3.3、重定向
$this->redirect("User/test",["id"=>5],"页面跳转中...");
如果只想纯粹的 URL 跳转,不使用 URL 规则,直接使用 redirect() 函数
redirect(‘https://www.lulublog.cn",5","页面跳转中...");
四、其他操作
4.1、I() 变量的获取和过滤
① I('变量类型.变量名',['默认值'],['过滤方法'])
变量类型 | 含义 |
get | 获取 GET 参数 |
post | 获取 POST 参数 |
params | 自动判断请求类型获取 GET、POST 或者 PUT 参数 |
request | 获取 REQUEST 参数 |
put | 获取 PUT 参数 |
session | 获取 $_SESSION 参数 |
cookie | 获取$_COOKIE 参数 |
server | 获取 $_SERVER 参数 |
globals | 获取 $_GLOBALS 参数 |
② 例子
I("get.id"); //$_GET["id"]
I("get.id",1); //$_GET["id"]没有值,则默认1
I("get.");
I("param.id");
I("id"); //param可以省略
PS:取消和开启 URL 的 ’URL_PARAMS_BIND_TYPE‘=>1 配置定义,在访问这个 URL 的时候结果有所不用:
http://localhost/demo/User/index/id/5/type/a
关闭 URL 传参顺序:Array([id]=>5 [type]=>1)
开启 URL 传参顺序:Array([0]=>id [1]=>5 [2]=>type [3]=>a)
③ 过滤方法
默认情况下,I() 默认过滤的是:htmlspecialchars,过滤掉 HTML。
过滤HTML,如果去掉了,则传递包含 HTML 的字符串,将不过滤
"DEFAULT_FILTER’=>"htmlspecialchars"
屏蔽系统默认的过滤
I("get.id","",false); //第三个字符串为空字符串均可
4.2、请求类型
常量 | 含义 |
IS_GET | 判断是否 GET 请求提交 |
IS_POST | 判断是否 POST 请求提交 |
IS_PUT | 判断是否 PUT 请求提交 |
IS_DELTE | 判断是否 DELTE 请求提交 |
IS_AJAX | 判断是否 AJAX 请求提交 |
4.3、空操作和空控制器
① 空操作
空操作是指系统在找不到请求的操作方法时,会定会到空操作(_empty)方法来执行。利用这个机制,我们实现错误页面和一些 URL 的优化。
//如果没有相关方法则执行
public function _empty($name){
echo "找不到方法:",$name;
}
② 空控制器
空控制器是指请求不到指定控制器时,调用一个专门的空控制器。利用这个机制,我们实现错误页面和一些 URL 的优化。
class EmptyController extends Controller{
public function index(){
echo "找不到控制器:",CONTROLLER_NAME;
}
}
4.4、操作绑定到类
把每个操作方法定位一个类的功能,即每个把层次分的更加细腻。
//设置操作绑定到类
"ACTION_BIND_CLASS’=>true
然后,在 Controller 目录下建立 User 目录,在 User 目录建立 index.class.php
namespace Home\Controller\User;
user Think\Controller;
class index extends Controller {
public function run(){
echo "User模块下的index类";
}
}
//前置后置方法
public function _before_run(){
echo ‘before_".ACTION_NAME;
}
public function _after_run(){
echo ‘after_".ACTION_NAME;
}
空方法,在目录里建立一个 _empty.class.php
class _empty extends Controller{
public function run(){
echo ’找不到".ACTION_NAME."方法";
}
}
空控制器,可以创建一个目录 _empty,然后建立 index.class.php
namespace Home\Controller\_empty;
user Think\Controller;
class index extends Controller{
public function run(){
echo ’找不到".CONTROLLER_NAME."控制器".ACTION_NAME."方法";
}