## 控制器定義
控制器文件通常放在`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`方法不需要任何返回值