一、控制器操作
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.phpnamespace 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.phpclass _empty extends Controller{
public function run(){
echo ’找不到'.ACTION_NAME.'方法';
}
}
空控制器,可以创建一个目录 _empty,然后建立 index.class.phpnamespace Home\Controller\_empty;
user Think\Controller;
class index extends Controller{
public function run(){
echo ’找不到'.CONTROLLER_NAME.'控制器'.ACTION_NAME.'方法';
}