1、公共操作有什么用?如何创建公共操作?
什么是公共操作,就是一个控制器中某个操作的返回值会影响到所有操作,或者它创建的数据可以为所有操作共享。你可能想到了,它就是构造方法。
我们在默认模块的控制器中来演示:
class Index
{
protected $lesson;
public function demo1()
{
return (new self('YII')) -> lesson;
}
public function demo2()
{
return $this -> lesson;
}
}
访问下demo1
和demo2
,都没有值,正确,因为lesson
还没初始化。
要初始化lesson
就要构造方法:
public function __construct($lesson='TP5')
{
$this->lesson = $lesson;
}
初始化后的lesson
就可以为其他操作取到,则构造方法就叫做公共操作。
如果当前控制器继承自Controller
类,那就简单多了,因为Controller
类中有一个初始化方法_initialize()
,继承并重写它即可:
class Index extends \think\Controller
{
protected $lesson;
public function _initialize($lesson='TP5')
{
$this->lesson = $lesson;
}
public function demo1()
{
$this -> _initialize('laraval');
return $this -> lesson;
}
public function demo2()
{
return $this -> lesson;
}
}
2、公共控制器类有什么用?如何创建公共控制器?
我们用构造方法或者基类的初始化方法解决了控制器中的操作共享数据问题,那么如果有多个控制器需要共享一些操作应该怎么做呢?
参照数据共享的方法,我们可以创建一个公共控制器类,让这个公共类继承自基类Controller
,然后我们把一些公共操作写到公共类中,这样的话,以后我们创建的控制器只要继承自这个公共类就可以了,不用直接继承自Controller
基类。
我们来演示一下如何创建公共控制器:
首先修改默认模块的默认控制器Index
:
class Index extends Base
{
public function demo()
{
return $this->my_site;
}
public function demo1()
{
return $this->test();
}
}
创建文件/application/index/controller/Base.php
:
<?php
namespace app\index\controller;
class Base extends \think\Controller
{
protected $my_site = 'tp5.com';
protected function test()
{
return '我的域名是:'.$this->my_site.'!';
}
}
访问下:http://tp5.com/index/index/demo
,因为Index
控制器继承自Base
类,所以可以直接访问到my_site
属性。
再访问下:http://tp5.com/index/index/demo1
,也可以直接访问Base类中的公共方法。
控制器的公共操作,解决了类中数据共享以及属性初始化的问题,公共控制器从控制器层面上解决了控制器类之间的属性和方法共享问题。
网友评论