[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格式