控制器定义

最后更新于:2022-04-02 01:49:09

## 控制器定义 控制器文件通常放在`application/module/controller`下面,类名和文件名保持大小写一致,并采用驼峰命名(首字母大写)。 一个典型的控制器类定义如下: ~~~ [danger] 为了更方便使用,控制器类建议继承系统的控制器基类`think\Controller`,虽然无需继承也可以使用。 控制器类文件的实际位置是 ~~~ application\index\controller\Index.php ~~~ 访问URL地址是(假设没有定义路由的情况下) ~~~ http://localhost/index.php/index ~~~ 如果你的控制器是`HelloWorld`,并且定义如下: ~~~ false, ~~~ ## 控制器的命名空间 控制器类的所在命名空间为`app\module\controller`,其中根命名空间`app`为系统默认,并且只能通过环境变量设置更改,例如我们可以在`.env`配置文件中设置: ~~~ APP_NAMESPACE = application ~~~ 则实际的控制器类应该更改定义如下: ~~~ [danger] 只是命名空间改变了,但实际的文件位置和文件名并没有改变。 ## 单一模块控制器 在应用配置文件`app.php`中设置 ~~~ // 是否支持多模块 'app_multi_module' => false, ~~~ 可以启用单一模块,那么控制器的命名空间中不需要模块名了,类的定义就变成了 ~~~ 控制器一般不需要任何输出,直接return即可。 ## 输出转换 默认情况下,控制器的返回输出不会做任何的数据处理,但可以设置输出格式,并进行自动的数据转换处理,前提是控制器的输出数据必须采用`return`的方式返回。 如果控制器定义为: ~~~ 'thinkphp','status'=>1]; } } ~~~ 当我们设置输出数据格式为JSON: ~~~ // 默认输出类型 'default_return_type' => 'json', ~~~ 我们访问 ~~~ http://localhost/index.php/index/Index/hello http://localhost/index.php/index/Index/data ~~~ 输出的结果变成: ~~~ "hello,world!" {"name":"thinkphp","status":1} ~~~ 默认情况下,控制器在ajax请求会对返回类型自动转换,默认为json 如果我们控制器定义 ~~~ 'thinkphp','status'=>1]; } } ~~~ 我们访问 ~~~ http://localhost/index.php/index/Index/data ~~~ 输出的结果变成: ~~~ {"name":"thinkphp","status":1} ~~~ ## 多级控制器 支持任意层次级别的控制器,并且支持路由,例如: ~~~ true, ~~~ 然后定义控制器如下: ~~~ '; } public function hello() { return 'hello'; } public function data() { return 'data'; } } ~~~ >[danger] `initialize`方法不需要任何返回值 如果访问 ~~~ http://localhost/index.php/index/Index/hello ~~~ 会输出 ~~~ init hello ~~~ 如果访问 ~~~ http://localhost/index.php/index/Index/data ~~~ 会输出 ~~~ init data ~~~
';