[TOC]
# 控制器
## 基礎控制器
### **下面是一個基礎控制器類的例子**
```
<?php
namespace app\home;
class Hello
{
public function index(){
return 'hello world';
}
}
```
這個是一個在在目錄`app/home/Hello.php` 下的一個文件存在一個`action=>index` 這個控制器的訪問路徑 `http://127.0.0.1/home/hello/index` 控制器目錄3層級結構類似`/home/hello/index`
## **無限級目錄控制器**
開啟無限極目錄結構
>[info]無限極目錄路由需要關閉配置文件`route.open_level=>false`
>[info]控制器支持無限極目錄結構,最終一個文件指向`Action` 倒數第二個為`Controller` 前面部分為`Module`
>注意`命名空間`使用`[PSR-4]
`
### **無限級目錄配置**
控制目錄結構層數在配置文件`conf/config => route.level`
```
// +----------------------------------------------------------------------
// | 項目結構層數配置
// | open_level
// | ture:開啟項目結構
// | false:關閉項目結構目錄
// | 關閉后取SCRIPT_NAME 最后一個為Action 倒數第二個為Controller 參數/s區分
// +----------------------------------------------------------------------
//
'route' => [
'level' => 3, // 項目結構層數數量
'open_level' => false,
'open_route' => true, // 是否開啟路由轉換功能 true開啟 false關閉
'files' => [CONFIG_PATH . 'route.php'], // 路由規則存放地址
'type' => 'sqlite', // 保存類型
],
```
### **創建一個無限級帶基礎`Controller`類的控制器**
```
namespace app\home\hello\one\two\three;
use denha\Controller;
class Index extends Controller
{
public function showView(){
return $this->view('<style type="text/css">*{ padding: 0; margin: 0; }a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; }body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; }p{ line-height: 1.6em; font-size: 47px;text-align:center;margin-top:20%; }ul{width:700px;margin:0 auto;}ul li{float:left; padding:0 35px;list-style:none;}</style><p> Denha <br/></p>');
}
public function ajaxJson(){
return $this->ajaxReturn(['status'=>true,'msg'=>'hello world']);
}
}
```
控制器最終請求地址為 http://127.0.0.1/home/hello/one/two/three/index/show_view
文件結構:
~~~
project
├─app
│ ├─home
│ │ ├─hello
│ │ │ ├─one
│ │ │ │ ├─two
│ │ │ │ │ ├─three
│ │ │ │ │ │ └─Index.php
~~~
這個控制器繼承了`denha\Controller`
>可以使用`show`方法`渲染視圖`
>可以使用`ajaxReturn`輸出json信息,如果是jsonp則返回jsonp格式