# 控制器

项目目录说明中我们看到了DefaultController.php文件及的内容

<?php
 namespace web\Controller;

 use Cml\Controller;

class DefaultController extends Controller
{
    use MiddlewareControllerTrait; //开启中间件支持

    public function index()
    {
        return $this->response->raw('欢迎使用cml框架,应用初始化成功');
        // echo '欢迎使用cml框架,应用初始化成功'; //不开启中间件
    }
}

可以看到 控制器都有带Controller后缀 且必须继承 Cml\Controller 这个基类 在这边命名空间以*web\Controller*开始 因为这边DefaultController直接是存放在web\Controller目录下 所以命名空间为 web\Controller,假如我们有一个商品模块商品模块下有商品跟订单两个控制器 这时目录结构则为 相应的Goods的文件内容为

 <?php
 namespace web\Controller\Goods;

 use Cml\Controller;

 class GoodsController extends Controller
 {
     public function index()
     {

     }
 }

在这里我们的命名空间就要相应的申明为 web\Controller\Goods

# 前置方法

如果要在执行所有方法前都先做某操作。只要申明 init()方法即可 如我们需要做权限控制,只要声明一个CommonController其它控制器都继承它

 <?php
 namespace web\Controller;

 use Cml\Controller;

 class CommonController extends Controller
 {
     public function init()
     {
        //权限处理
     }
 }

# 开启中间件支持

中间件的支持遵循Psr-7、Psr-15、Psr-17相关规范,文件数量较多,对于已经在线上的稳定业务如果框架默认开启会降低性能。所以改成可选的方式引入。

use MiddlewareControllerTrait; //开启中间件支持

引用MiddlewareControllerTrait之后我们可以如下方式操作RequestResponse

$this->request->getHeaderLine('accept');
return $this->response->raw('hello word');

# 发起curl请求

 $this->curlClient('http://baidu.com', CurlClient::REQUEST_TYPE_GET)//创建一个curl请求实例
 ->sendRequest(); //发送请求

//未开启中间件支持则使用
\Cml\Http\Request::curl('http://baidu.com', [], [], 'GET');