优雅的使用控制器基类

使用控制器基类的好处是可以进行一些公共的初始化任务,比如权限验证和登录检查,如果我们不使用控制器基类的话,我们需要在每一个控制器类中进行书写初始化代码:

<?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(),初始化操作依然支持抛出异常。