Laravel 缓存package

有时候由于某些特殊原因,想把整个网站缓存下来为静态html。nginx虽然也可以搞,不过我还是喜欢用php来解决。搜索了一下,发现此package

https://github.com/Anahkiasen/flatten

安装方法详见github。 publish config之后。有几个配置要填。

<?php return array(

  // 总开关,是否开启缓存,不过我测试了好像不管用。无论设置未false还是true都会开启缓存。
  'enabled'        => TRUE,

  // 忽略配置,比如'users',就将会忽略所有‘/users*’路径的页面缓存
  'ignore'       => array('user'),

  // 特定缓存配置,比如下面的示例就将只缓存'/galleries*'和'/categories*'页面
  'only'         => array('galleries', 'categories'),

  // 特定缓存条件,当条件为true的时候缓存。比如如下的配置,当用户为游客的时候开启缓存。
  'blockers'     => array(Auth::guest()),

  //缓存有效时间(分钟),如下设置为10分钟
  'lifetime'     => 10,

  // An array of string or variables to add to the salt being used
  // to differentiate pages
  // 我也不太清楚,求大神解释
  'saltshaker'   => array(),
);

当这个配置完毕之后缓存系统就生效了。这时候你再去访问你要缓存的页面,刷新两次,查看源码就会发现最底下有一行缓存信息。

<!-- cached on 2014-11-10 22:17:11 -->

表示当前页面为直接读取的缓存html。

手动重置缓存

有时候需要对页面进行手动重置缓存,比如用户更新了资料,则需要重置一下用户详情页面的缓存。可以使用的方法有如下:

// Manual flushing
Flatten::flushAll();//重置所有的缓存
Flatten::flushPattern('users/.+');//重置匹配路径页面的缓存
Flatten::flushUrl('http://localhost/users/taylorotwell');//重置特定路径页面的缓存

// 使用路由方式和控制器方式重置路由
Flatten::flushRoute('user', 'taylorotwell');
Flatten::flushAction('UsersController@user', 'taylorotwell');

// 重置section部分的缓存。这个下面会详细说明
Flatten::flushSection('articles');

section部分的缓存

<h1>这一部分将不会缓存</h1>
<?php foreach ($articles as $article): ?>
    <?= $article->name ?>
<?php endforeach; ?>

<h1>下面这部分section将会被缓存</h1>
<?php Flatten::section('articles', function () use ($articles) { ?>
    <?php foreach ($articles as $article): ?>
        <?= $article->name ?>
    <?php endforeach; ?>
<?php }); ?>

section部分缓存的blade方式

<h1>这一部分将不会缓存</h1>
@foreach($articles as $articles)
    {{ $article->name }}
@endforeach

<h1>下面这部分section将会被缓存10分钟</h1>
@cache('articles', 10)
    @foreach($articles as $article)
        {{ $article->name }}
    @endforeach
@endcache

Kickstarting

Flatten还有一个Kickstarting功能。具体未研究。有待大神指教。

小球球

继续阅读此作者的更多文章

深圳