前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效。

其他的分层控制器层和内部调用控制器的情况下前置和后置操作是无效的。

系统会检测当前操作是否具有前置和后置操作,如果存在就会按照顺序执行,前置和后置操作的定义方式如下:

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller{
    //前置操作方法
    public function _before_index(){
        echo 'before<br/>';
    }
    public function index(){
        echo 'index<br/>';
    }
    //后置操作方法
    public function _after_index(){
        echo 'after<br/>';
    }
}

如果我们访问 http://serverName/index.php/Home/Index/index

结果会输出

before
index
after

前置和后置操作的注意事项如下:

  1. 如果当前的操作并没有定义操作方法,而是直接渲染模板文件,那么如果定义了前置和后置方法的话,依然会生效。真正有模板输出的可能仅仅是当前的操作,前置和后置操作一般情况是没有任何输出的。
  2. 需要注意的是,在有些方法里面使用了exit或者错误输出之类的话 有可能不会再执行后置方法了。例如,如果在当前操作里面调用了控制器类的error方法,那么将不会再执行后置操作,但是不影响success方法的后置方法执行。