欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

laravel的blade模板如何生成静态化页面?

laravel的blade模板如何生成静态化页面?



百度了一下php的静态化技术,大致有3种:
1.用正则替换页面模板文件
2.用ob_star技术
3.用第三方模板引擎

一开始很天真,以为在控制器里直接用$page=View('index');然后把$page保存起来就是静态页面,后来调试一下发觉$page是一个实体,也没有哪个属性记录到生成的html内容,就放弃了。

换了ob_star技术,但是在blade模板的第一行加入ob_star(),在页面最后一行加上ob_get_contents()等代码来获取页面流,写入一个文件。结果是成功把生成的页面写入html文件,但是浏览器中看到的页面是空白的。

求静态化解决方案。。。。。


解析开始是由__toString()触发的

解析过程中是用ob_start实现的,使用了很多次ob_start

你可以看下Illuminate\View\View这个类

也可以调用Illuminate\View\View__toString()方法来生成静态页面,如下:

<?php
$htmlStrings = view('viewPath')->__toString();

对于laravel 5(4应该也差不多)


来自 http://phpstudy.php.cn/c.php/40100.html


laravel页面静态化的方法
关键词: 发布时间:2018-06-23 23:32:39 浏览次数:667

laravel页面静态化的方法

相对于php原生的ob方式,laravel提供了便利的__toString方法来生成静态化页面;


/**
 * 首页静态化
 */
public function index()
{
    $key = 'web_home';
    if (!Redis::exists($key)) {
        echo "<a href='/' target='_blank'>首页缓存不存在,请先访问一次首页</a>";
        die();
    }
    $data = unserialize(Redis::get($key));
    $content = view('home.Index.index', $data)->__toString();
    $dir = dirname(dirname(dirname(dirname(__DIR__))));
    $fp = fopen($dir . '/public/index.html', 'w') or die('打开文件失败');
    if (fwrite($fp, $content)) {
        echo "<a href='/index.html' target='_blank'>生成成功,点击查看</a>";
    }
    fclose($fp);
}

来自 http://www.hu-rong.com/article/365

普通分类: