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方法
到这里整个流程就结束了,有兴趣的可以看下我另外一篇文章
世人慌慌张张,不过图碎银几两
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~