31、TP5的前置操作

1、什么是前置操作?

所谓的前置操作,就是某个操作执行之前先要执行它才可以。类的构造方法就可以看做类中所有操作的前置操作。
所以我们可以用类的构造方法来初始化类的属性。
前置操作与构造方法相比呢它的功能更进了一步,他不仅可以把某个方法指定为全部方法的前置操作,还可以将这个方法指定为特定方法的前置操作,或者除了某个方法之外的其他方法的前置操作。

打开默认模块默认控制器来进行演示,如果要在当前控制器中使用前置操作,那么这个控制器就必须继承自基类Controller

创建前置方法分两步:
第一步,创建前置操作方法;
第二步,配置前置操作列表。

class Index extends \think\Controller
{
    //前置方法列表,继承自Controller
    protected $beforeActionList = [//第二步,配置前置操作列表。
      'before1'=>'',//值为空表示为当前类中全部操作的前置操作
      'before2'=>['only'=>'demo2'],//before2前置操作仅对demo2方法有效
      'before3'=>['except'=>'demo1','demo2'],//before3前置操作仅对demo3方法有效
    ];
    //自定义属性
    protected $siteName;
    protected function before1()//第一步,创建前置操作方法;
    {
      $this->siteName = $this->request->param('name');
    }
    protected function before2()
    {
      $this->siteName = 'laraval';
    }
    protected function before3()
    {
      $this->siteName = 'YII';
    }
    public function demo1()
    {
      return $this->siteName;
    }
    public function demo2()
    {
      return $this->siteName;
    }
    public function demo3()
    {
      return $this->siteName;
    }
}

访问:http://tp5.com/index/index/demo1/name/TP5就能执行前置操作before1()
访问:http://tp5.com/index/index/demo2就能执行前置操作before2()
访问:http://tp5.com/index/index/demo3就能执行前置操作before3()

2、为什么必须继承基类Controller,才能创建前置操作?

我们来看看基类Controller就知道,基类Controller中有$beforeActionList属性,即前置操作方法列表,默认值为空数组,因为前置方法的配置都是基于它,所以必须继承基类Controller才能实现。

在之前的版本中,除了前置操作,还有后置操作,不过TP5中已经取消了形同鸡肋的后置操作,关于前置操作,可以想象成全部或者部分方法的构造函数。其目的主要还是为了项目规范,易维护,好扩展。

你可能感兴趣的:(31、TP5的前置操作)