使用控制器基类的好处是可以进行一些公共的初始化任务,比如权限验证和登录检查,如果我们不使用控制器基类的话,我们需要在每一个控制器类中进行书写初始化代码:
<?php
namespace app\index\controller;
//use think\Controller;
class Index extends Controller
{
public function __construct()
{
//未引入控制器基类使用该方式
echo 'Hello World!';
}
public function _initialize()
{
//引入控制器基类使用该方式
echo 'Hello World!';
}
}
?>
当所有的控制器类都需要执行一些公共方法,则只需要让所有的控制器类继承一个公共的控制器类即可,然后在公共控制器类中定义初始化方法即可,例如我们定义一个Base.php的公共控制器,代码如下:
<?php
namespace app\index\controller;
use think\Controller;
class Base extends Controller
{
public function _initialize()
{
echo '这里是公共控制器初始化方法';
}
}
?>
然后我们在Index.php控制器中引用自定义的Base控制器,代码如下:
<?php
namespace app\index\controller;
user app\index\controller\Base;
class Index extends Base
{
public function hello()
{
return '继承自控制器Base类';
}
}
接下来我们访问http://www.tp5.com/index/index/hello,则输出:这里是公共控制器初始化方法;继承自控制器Base类。
注意:
初始化操作里的return返回值的操作是无效的,可以使用echo输出,也不能使用redirect助手函数进行重定向,如果要使用重定向的页面跳转(例如权限检查后的跳转)可以使用$this->redirect(),初始化操作依然支持抛出异常。