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中已经取消了形同鸡肋的后置操作,关于前置操作,可以想象成全部或者部分方法的构造函数。其目的主要还是为了项目规范,易维护,好扩展。