控制器定义
最后更新于: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
~~~
';