gchaincl / laravel-fragment-caching
Fragment Caching support helper
Installs: 1 371
Dependents: 1
Suggesters: 0
Security: 0
Stars: 34
Watchers: 2
Forks: 5
Open Issues: 2
Requires
- illuminate/cache: 4.x
This package is not auto-updated.
Last update: 2021-02-05 21:02:17 UTC
README
This project is not supported anymore, you can try matryoshka instead.
laravel-fragment-caching
Add a Fragment caching support helper. Blog post
Installation
Run: composer require gchaincl/laravel-fragment-caching:dev-master
or
- add:
"require": { "gchaincl/laravel-fragment-caching": "dev-master" },
to composer.json - run:
composer install
- add: The following to your
app/config/app.php
$providers => array( ... 'Gchaincl\LaravelFragmentCaching\ViewServiceProvider', )
Usage
In your view:
<ul> @foreach ($posts as $post) @cache("post" . $post->id) <li> {{ link_to_route('post.show', $post->title, $post->id) }} ({{ $post->user->username }})</li> @endcache @endforeach </ul>
First time we load that view, Framework will run 3 queries:
select * from "posts" select * from "users" where "users"."id" = '5' limit 1 select * from "users" where "users"."id" = '5' limit 1
Second time, as fragments are already cached, there will be just one query:
select * from "posts"
Conditional caching
In situations where you don't always want to cache a block you can use @cacheif($condition, $cacheId)
{{-- Only use the cache for guests, admins will always get content rendered from the template --}} @cacheif( Auth::guest(), "post" . $post->id) <li> {{ link_to_route('post.show', $post->title, $post->id) }} (@if (Auth::guest()) {{ $post->user->username }} @else {{ $post->user->email }} @endif)</li> @endcacheif
Tip
To update view rendering on model changes, you should expire your fragments:
// app/model/Post.php class Post extends Eloquent { public static function boot() { parent::boot(); static::updated(function($model) { Cache::forget("post" . $model->id); }); } }