29. 基础控制器

大多数情况下,我们建议给你的控制器继承一个基础控制器。

默认安装后,系统提供了一个app\BaseController基础控制器类,你可以对该基础控制器进行修改。

基础控制器的位置可以随意放置,只需要注意更改命名空间即可。

该基础控制器仅仅提供了控制器验证功能,并注入了think\Appthink\Request对象,因此你可以直接在控制器中使用apprequest属性调用think\Appthink\Request对象实例,下面是一个例子:

namespace app\controller;
use app\BaseController;
class Index extends BaseController
{
    public function index()
    {
        $action = $this->request->action();
        $path = $this->app->getBasePath();
    }
}

控制器验证

基础控制器提供了数据验证功能,使用如下:

namespace app\controller;
use app\BaseController;
use think\exception\ValidateException;
class Index extends BaseController
{
    public function index()
    {
        try {
            $this->validate( [
                'name'  => 'thinkphp',
                'email' => 'thinkphp@qq.com',
            ],  'app\index\validate\User');
        } catch (ValidateException $e) {
            // 验证失败 输出错误信息
            dump($e->getError());
        }
    }
}

该示例使用了验证器功能,具体可以参考验证章节的验证器部分,这里暂时不做展开。

如果需要批量验证,可以改为:

namespace app\controller;
use app\BaseController;
use think\exception\ValidateException;
class Index extends BaseController
{
    // 开启批量验证
    protected $batchValidate = true;
    public function index()
    {
        try {
            $this->validate( [
                'name'  => 'thinkphp',
                'email' => 'thinkphp@qq.com',
            ],  'app\index\validate\User');
        } catch (ValidateException $e) {
            // 验证失败 输出错误信息
            dump($e->getError());
        }
    }
}
下一节:空控制器的概念是指当系统找不到指定的控制器名称的时候,系统会尝试定位当前应用下的空控制器(Error)类,利用这个机制我们可以用来定制错误页面和进行URL的优化。