laravel5.1 view的一些源代码研究
想要实现一个静态化的功能,在laravel只要用middlewareh+IO操作就可以很好的实现这个功能了。
但是,我想要实现一个php视图文件生成一个静态文件,这个有点类似laravel的view的compile了,但是laravel的compiel过程只是把blade语法解析成php语法了,如果我是框架作者的话,那我也不会去静态化一个view的。
先说下laravel的模板的解析文件的更新机制吧。上图。

然后看下isExpired函数的实现

laravel的更新使用的是它的filesystem

这里补充一下编译后的php文件的名称的由来, 也是花了我一点时间的。
我自己的测试结果是可以的。
然后问题就来了
这里我也写入文件,写入文件中的内容是view中的php代码被执行完的,是完整的HTML代码。
但是吧, 我得到了两个文件,一个文件是页面中显示的。一个文件的内容是空白的, 我也不知道为什么呢。

这一段代码就是执行被编译后的php代码的, 这一段代码很好的。
laravel还是挺难的。
PS:如果你没在view里面输出数据,而在其他地方输出数据的话,那么上面我写入的文件的中内容不会包含该数据。
PS:更新上面一句,ob_start();可以让echo的stringhold住。
PS:这里的include 的文件是blade解析之后的文件,一般在这个文件中会调用render方法,这是一个小递归,最终还会运行到这里的。在我自己的实验中view.php中render方法会调用至少两次(如果你使用blade的php引用了另一个blade文件的话)
未完待续。
浙公网安备 33010602011771号