Thinkphp3 第1章 控制器Controller Thinkphp3 第1章 控制器Controller

2018-02-08

一、控制器操作

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."方法";
    }

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开微信扫一扫,即可进行扫码打赏哦

阅读 3664