[搜]

贴心猫-文档

场景分析

  • 正常情况下,使用上一节中的配置文件来绑定模板,已经可以满足大部分场景需求了;
    • 而且在模板里面,也可直接使用标签,方便的调用数据;
    • 所以,这也是系统默认的 路由绑定模板,输出视图的买方式;
  • 但也有一些特殊场景,这样配置不能满足需求;
    • 一些人习惯了任何页面都用:控制器-方法 来获取数据,输出视图;
    • 一些场合,如不同类别(或会员级别),使用不同模板,输出不同视图;
    • 特别是一些专题;每个(类)专题需要设置不同模板
    • 这时候,经典的:控制器-方法 模式登场了!

控制器规范

  • 控制器规范
    • 控制器文件放在每一组模板目录下的:/_ctrls/下; 如:/views/comm/_ctrls/, /views/adm/_ctrls/
    • 每一个模型,用一个控制器文件,如:infoCtrl.php, newsCtrl.php
    • 方法名类似:mapAct, dutyAct ... 对应 info-map, info-duty 路由;
    • 命名空间:在 imcat 的基础上,按模板目录增加一层,如:namespace imcat\comm;, namespace imcat\adm;
  • 代码示例

文件:{views}/demo/_ctrls/modcCtrl.php 查看代码

  • 返回数据
  • 模板控制
    • 更改模板:路由modc-m2kid1,方法m2kid1Act,设置newtpl = 'mod2/kid1'; : 更改模板为{views}/demo/mod2/kid1.htm
    • 更改模板:路由modc-hi,方法hiAct,设置newtpl = 'modc/hello'; : 更改模板为{views}/demo/modc/hello.htm
    • 原始包含-不解析判断:路由modc-tplorg,方法tplorgAct,设置tplorg = 'modc/tplorg'; : 更改模板为{views}/demo/modc/tplorg.htm,切模板为纯htm或php代码,标签不会解析;
    • 不需要模板-方法里处理就结束了:路由modc-notpl,方法notplAct,设置tplnull = 1; : 设置不需要模板;当然,也可直接在方法里面die()
  • 其它DIY
    • 多语言跳转:使用控制器-方法;另一个用途是自定义跳转:比如企业站有五个语言展示版本,那可根据ip地址,或客户的设置,跳转到相应的语言;
    • 多城市分站跳转:如果全国有200个地区级分站,那可先根据ip得到城市名称,然后跳转到响应分站;
    • 跳转示例,根据这些代码提示,自己组装url跳转...
    • 其它玩法,看你的想象了 !!!

默认方法

  • 思想来源
    • 这个思想,来源于ThinkPHP的空操作/_empty();系统在找不到路由对应的操作方法时,会定位到默认方法(_defAct)(如果有)来执行。
  • 场景示例
    • 上述控制器 modcCtrl 定义了一些方法;那么除上述之外,我任意输入其他类似modc-xxx的路由,想让它们统一通过一个方法执行;
    • 此时,我们可以定义\_defAct方法;
  • 默认方法测试

默认控制器

  • 思想来源
    • 这个思想,来源于ThinkPHP的空控制器/EmptyController;当系统找不到请求的控制器名称的时候,系统会尝试定位默认控制器(_defCtrl)。
  • 配置(后台为例)
    • 配置文件:/veiws/adm/_config/va_home.php;
    • 配置值:'c._defCtrl' => '_defCtrl';
    • 控制器文件:/veiws/adm/_ctrls/_defCtrl.php;
    • 查看源码
  • 说明/应用
    • a. 典型的应用,就是后台管理;查看代码
    • b. /book.php 入口下,默认文档页面,都用同样的方法来处理;查看代码
    • c. /demo.php 入口下,未配置默认控制器;
      一旦配置:核心基础 - 绑定模板 - 默认模板 中 测试路由 等 url,都会定位到 默认控制器;导致一些问题无法说明;