9.3.视图定位器

视图定位器

根据ModelAndView来定位视图文件

//return $this->render('index',[])

object(qing\mv\ModelAndView)#75 (7) {
  ["viewName"]=>
  string(11) "index"
  ["viewPath"]=>
  string(0) ""
  ["vars"]=>[]
}  

内置视图定位器

qing\view\finder\CtrlFinder;
qing\view\finder\ActionFinder;
qing\view\finder\ModFinder;

ActionFinder定位器

按操作名定位

//路由?c=ccc&a=aaa

//指定: (视图目录)/index.html
return $this->render('index',[])
//自动获取操作名: (视图目录)/aaa.html
return $this->render('',[])

CtrlFinder按控制器分类视图文件定位器

//路由?c=ccc&a=aaa

//#视图不为空,则作为控制器名的子目录
//(视图目录)/控制器名/指定视图名.html
//(视图目录)/ccc/add.html
return $this->render('add',[])

//自动获取控制器名和操作名
//(视图目录)/ccc/aaa.html
return $this->render('',[])

ModFinder包含模块文件定位器

ModFinder和CtrlFinder类似,不同时的是ModFinder包含了模块名

//路由?c=ccc&a=aaa&m=mmm

//(视图目录)/mmm/ccc/add.html
return $this->render('add',[])

//(视图目录)/mmm/ccc/aaa.html
return $this->render('',[])

在模块中指定模块的视图定位器

<?php
namespace main;
use qing\app\MainModule as MM;
use qing\view\finder\CtrlFinder;
use qing\view\finder\ActionFinder;
use qing\view\finder\ModFinder;
//
class MainModule extends MM{
    /**
     * @param string $viewName
     * @return string
     */
    public function getViewName($viewName){
        return CtrlFinder::getViewName($viewName);
        return ActionFinder::getViewName($viewName);
        return ModFinder::getViewName($viewName);
        //自定义定位器
        return "./views/{$viewName}.html";
    }
}
?>