ThinkPHP 控制器

控制器

控制器定义

  • 手动创建
  • 命令行生成php think make:controller app\index\controller\Test

注意:继承think\Controller是可选的,但推荐继承,这样可以方便得使用某些方法,比如初始化操作,验证等。

控制器输出

1、默认情况下,控制器的输出全部采用return的方式,无需进行任何的手动输出,系统会自动完成渲染内容的输出
2、默认情况下,控制器的返回输出不会做任何的数据处理,但可以设置输出格式,并进行自动的数据转换处理,前提是控制器的输出数据必须采用return的方式返回
3、设置默认输出类型,比如默认输出类型为JSON:'default_return_type' => 'json'

多级控制器

在开发api的时候,经常会遇到版本问题,那么可以以开启路由的方式,路由到多级控制器,比如
application/index/controller/user/Blog.php文件
那么可以定义路由Route::get('user/blog','index/user.blog/index');

控制器初始化

1、如果你的控制器类继承了系统控制器基类(\think\Controller)的话,可以定义控制器初始化方法initialize,该方法会在调用控制器的方法之前首先执行,如非必要,不建议直接修改控制器的架构函数。
2、initialize方法不需要任何返回值

前置操作

可以为某个或者某些操作指定前置执行的操作方法,设置 beforeActionList 属性可以指定某个方法为其他方法的前置操作,数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法。

class Index extends Controller
{
    protected $beforeActionList = [
        'first',
        'second' =>  ['except'=>'hello'],
        'three'  =>  ['only'=>'hello,data'],
    ];
}

跳转与重定向

1、在应用开发中,经常会遇到一些带有提示信息的跳转页面,例如操作成功或者操作错误页面,并且自动跳转到另外一个目标页面,系统的\think\Controller类内置了两个跳转方法successerror,用于页面跳转提示
2、可以改变默认的模板,在应用配置文件中修改dispatch_error_tmpl,dispatch_success_tmpl

空操作与空控制器

1、空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化
2、空控制器的概念是指当系统找不到指定的控制器名称的时候,系统会尝试定位空控制器(Error),利用这个机制我们可以用来定制错误页面和进行URL的优化
3、空控制器Error是可以定义的,可修改应用配置的empty_controller选项

分层控制器

除了访问控制器外,我们还可以定义其他分层控制器类,这些分层控制器是不能够被URL访问直接调用到的,只能在访问控制器、模型类的内部,或者视图模板文件中进行调用

比如:app\index\event\Blog

$event = \think\facade\App::controller('Blog', 'event');
echo $event->update(5); // 调用Blog类的update方法

$event = controller('Blog', 'event');
echo $event->update(5); //使用 controller 助手函数实例化类 调用Blog类的update方法

$event = controller('Admin/Blog', 'event');//支持跨模块使用

资源控制器

php think make:controller \app\index\controller\Blog 再配上Router::resource('blog','index/Blog')资源路由。

控制器中间件

你的控制器需要继承系统的think\Controller类,然后在控制器中定义middleware属性,例如:

namespace app\index\controller;

use think\Controller;

class Index extends Controller
{
    protected $middleware = [ 
        'Auth'  => ['except' => ['hello'] ],
        'Hello'    => ['only'   => ['hello'] ],
    ];

    public function index()
    {
        return 'index';
    }

    public function hello()
    {
        return 'hello';
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
今年不学习,明天惨唧唧。
zs4336
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!