• 控制器
    • 控制器定义
    • 路径查找
      • 前缀到类
    • 输出JSON
    • 页面渲染输出
    • 模板引擎
      • 模板传递数据
    • 重定向
    • 输出内容到 body
    • 文件下载

    控制器

    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架构   下一篇:控制器前置方法