控制器

RapPhp的的控制器无需继承任何类,只要求控制器的类名以Controller结尾,并且要求控制器的命名空间(namespace)以\controller结尾;

类要求Controller结尾是为了在 ide 里好区分,防止重名类出现命名空间(namespace)以controller结尾为了安全

``

控制器定义


一个比较典型的控制器如下

  1. namespace app\index\controller;
  2. class IndexController
  3. {
  4. public function index()
  5. {
  6. return 'index';
  7. }
  8. }

控制器类文件的实际位置是

  1. app\index\controller\IndexController.php

路径查找


路径查找是 RapPhp 特色功能,控制器的访问路径可以通过访问的路径自动查找,支持无限级分组

如配置

  1. 'mapping'=>[//mvc 的路径配置
  2. "/io"=>"/app/io",
  3. ],

这里定义/io 的查找前缀是/app/io

那么路径

/io/user/save

对应的控制器为

  1. app\io\controller\UserController.php
  2. save 方法
/io/user/event/save

对应的控制器为

  1. app\io\user\controller\EventController.php
  2. save 方法

这样控制器支持无限极向下分组

作为默认如果没有配置 都会到/app下进行查找 ,上面配置其实不配置也能访问到

前缀到类


如配置

  1. 'mapping'=>[//mvc 的路径配置
  2. "/io"=>UserController::class
  3. ],

那么路径

/io/save

对应的控制器为

  1. app\io\controller\UserController.php
  2. save 方法

这样路径可以少到两级结构

特别说明默认当路径只有两级时如 /book/test 找的控制器为 app/controller/BookController 的 test 方法

输出JSON


控制器输出 JSON ,只需要控制器return对象或数组就行输出内容会自动转换为数组

  1. class IndexController
  2. {
  3. public function save()
  4. {
  5. return ['success'=>true,msg=>'保存成功'];
  6. }
  7. }

输出的请求头是application/json内容是

  1. {'success':true,'msg':'保存成功'}

两个默认的返回

  1. public function save()
  2. {
  3. return success('保存成功');
  4. }
  5. public function save()
  6. {
  7. return fail('保存失败');
  8. }

页面渲染输出

建议大家在返回的是页面的情况下路径后面添加上后缀 如/test/list.html或/test/list.do具体原因可以参照 异常显示

页面渲染,只需要return模板页面的路径,查找的模板地址默认为上一级 下view目录的同名的. html 文件


  1. namespace app\index\controller;
  2. class IndexController
  3. {
  4. public function index()
  5. {
  6. return 'index';
  7. }
  8. }

这里查找的模板地址为

app/index/view/index.html

如果 以/开头的话

  1. 配置项为
  2. 'view'=>[
  3. 'type'=>'twig',
  4. 'template_base'=>'template' //默认模板位置
  5. ]
  6. 返回结果是
  7. retrun '/index';

那查找的模板地址为

template/index.html

模板引擎


RapPhp 可以和任意模板引擎搭配使用框架提供了 twig smarty 和 php三种默认实现 , 默认实现都只是展示,正式项目中需要自己写实现类配置模板的配置如下

  1. 'view'=>[
  2. 'type'=>'twig', //smarty或 php
  3. 'template_base'=>'template'
  4. ],

如果你喜欢其他模板引擎,只需要自己写个类集成自rap\web\mvc\view\View 就可以了

模板传递数据


可以通过 $response->assign方法进行传递

  1. namespace app\index\controller;
  2. class IndexController
  3. {
  4. public function index(Request $request,Response $response)
  5. {
  6. $response->assign("a","a");
  7. return 'index';
  8. }
  9. }

重定向

默认重定向的 http_response_code为200

  1. return redirect('a'); //同路径
  2. return redirect('/a/a'); //根路径
  3. return redirect("http://baidu.com/other/page"); //绝对路径

输出内容到 body

  1. retrun body('内容')';

文件下载

  1. $file=ROOT_PATH.'test.zip';
  2. retrun downloadFile($file);

上一篇:MVC架构   下一篇:控制器前置方法