## 控制器定义
控制器文件通常放在`application/module/controller`下面,类名和文件名保持大小写一致,并采用驼峰命名(首字母大写)。
一个典型的控制器类定义如下:
~~~
<?php
namespace application\index\controller;
use lib\Controller;
class Index extends Controller
{
public function index()
{
return ['data' =>'' ,'code'=> 0, 'msg' => 'success'];
}
}
~~~
> 为了更方便使用,控制器类建议继承系统的控制器基类`lib\Controller`,虽然无需继承也可以使用。
控制器类文件的实际位置是
~~~
Applications\index\controller\Index.php
~~~
访问api地址是(假设没有定义路由的情况下)
~~~
~~~
{
"api": "index/index/idex",
"app": "ipad",
"ver": 88,
"data": {
"id": 1,
"city": "江苏苏州",
"country": "中国"
}
}
~~~
~~~
如果你的控制器是`HelloWorld`,并且定义如下:
## 控制器的命名空间
遵循PSR0规范,命名空间跟文件路径完全一致
## 渲染输出
默认情况下,控制器的输出全部采用`return` 一个数组的方式,最后转换为json方式发送给客户端
~~~
namespace application\index\controller;
use lib\Controller;
use lib\Request;
use application\index\model\User as M;
class User extends Controller
{
public function getInfo(Request $request)
{
$id = $request->param('id',0);
$res = $model->getInfo($id);
return ['data' =>$res ,'code'=> 0, 'msg' => 'success'];
}
~~~
> 控制器一般不需要任何输出,直接return即可。
## 控制器初始化
如果你的控制器类继承了系统控制器基类(`\lib\Controller`)的话,可以定义控制器初始化方法`initialize`,该方法会在调用控制器的方法之前首先执行,如非必要,不建议直接修改控制器的架构函数。
例如:
~~~
<?php
namespace application\index\controller;
use think\Controller;
class Index extends Controller
{
protected function initialize()
{
echo 'init<br/>';
}
public function hello()
{
return 'hello';
}
public function data()
{
return 'data';
}
}
~~~
> `initialize`方法不需要任何返回值