第十四章:第6节thinkPHP框架——视图文件定位

更新于:2018-01-04 20:06:24

介绍完控制器,接着介绍视图。


控制器方法主要写业务逻辑,视图文件主要做数据展示。通常情况下,一个控制器方法要对应一个视图文件。控制器方法把逻辑运算最后得到的数据传递给对应的视图文件。


我们先学习下:一个控制器方法怎么对应(引入)一个视图文件。


同一模块下,在view目录下为每一个控制器建一个同名的目录。


1.png


我们目前有个“Test控制器”,就建一个“test目录”,使用小写就可以。


Test控制器中对应的视图文件都放入这个“test目录”中就可以。


目前有一个test2.html文件:


1.png


在Test控制器test2方法中可使用fetch方法引入test2.html视图文件。


1.png


当视图文件名称与控制器方法名称一样时,fetch方法不需要传任何参数就可以定位到。


1.png


fetch方法:


在控制器方法中引入视图文件,主要依靠fetch方法,看下源代码:


1.png

它其实是view对象的一个方法,所以我们在控制器中还可以$this->view->fetch这样使用。


有关fetch方法的使用,挺重要的,手册上介绍的很详细,楠神直接截图:


1.png

1.png


建议:


大家在写视图文件时,要保持好良好的结构,控制器方法名称与视图名称最好一一对应,并且最好这样写代码“return $view->fetch(__FUNCTION__);”引入视图文件。


“__FUNCTION__”是魔术常量,可获取方法的名称。


为什么要把这个魔术常量当做参数传入fetch方法呢?


这是楠神写代码的一个习惯,主要为了解决在Linux大小写的问题。举个例子说明下:


控制器的方法比如我定义为“aBc”,对应的模板为“aBc.html”。如果我把路由设置为不区分大小写,那输入URL:http://域名/模块/控制器/abc也能访问到“aBc”方法。我在方法里使用“$this->fetch()”引入视图文件,由于没有传参,TP框架根据URL自动定位视图文件为“abc.html”。在Windows操作系统下,是不会出错的,文件名称不区分大小写。可在Linux下,就会出问题了,定位“abc.html”找不到会报错。


如果把魔术常量“__FUNCTION__”当做参数传入fetch方法,就可以解决这个问题。


本节学习代码》》》