tp6源码解析-第二天,ThinkPHP6编译模板流程详解,ThinkPHP6模板源码详解
TP6源码解析,ThinkPHP6模板编译流程详解
前言:刚开始写博客。如果觉得本篇文章对您有所帮助。点个赞再走也不迟
模板编译流程,大概是:
- 先获取到View类实例(依赖注入也好,通过助手函数也好)
- 使用View编译方法fetch或display。都会通过engine方法获取到当前的模板驱动
- 把模板以及要编译的数据传入到驱动中对应的display方法或fetch方法
- display和fetch差不多(个人感觉),这俩的大致流程都是
- 判断缓存文件失效没,如果失效重新编译放入缓存目录。如果没失效则直接读取输出或返回
1、app\controller\Index->Index() 控制器方法
上图代码所示,tp的渲染模板。默认有两种方式,一种是调用fetch直接进行渲染。第二种就是先调用assign方法传入要渲染的数据。然后再调用display方法进行渲染。(还有助手函数view().这里就不过多描述了)。
2、接下来就讲讲tp是如何将数据渲染到模板上。并且输出
①第一种方式
首先会调用\Think\View视图类中的fetch方法
接下来看下getContent方法
传入的闭包内容
追踪到engine方法
再追踪到tp默认视图驱动中的fetch方法
这里主要是编译模板的方法 compiler。主要就是把模板内的文件都替换掉
接着回到fetch方法中
这里是获取到\Think\template\driver\File类实例并且将缓存文件和数据传入到read方法中
到这里,第一种方式流程就算是完了
第二种、display方法去渲染
追踪到Template类中的display方法
到这里整个流程就结束了,有兴趣的可以看下我另外一篇文章
世人慌慌张张,不过图碎银几两