Package Data | |
---|---|
Maintainer Username: | SlyDeath |
Maintainer Contact: | slyrs@yandex.ru (SlyDeath) |
Package Create Date: | 2016-07-31 |
Package Last Update: | 2021-07-15 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-12-25 15:03:38 |
Package Statistics | |
---|---|
Total Downloads: | 1,047 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 1 |
Total Watchers: | 3 |
Total Forks: | 0 |
Total Open Issues: | 0 |
Версия 3.* для Laravel 5.8, для 5.6-5.7 использовать релиз 2.*
Добавить пакет в composer.json:
composer require slydeath/laravel5-nested-caching
Открыть config/app.php
и добавить сервис провайдера в массив providers
:
SlyDeath\NestedCaching\NestedCachingServiceProvider::class,
Для размещения файла конфигурации выполнить:
php artisan vendor:publish --provider="SlyDeath\NestedCaching\NestedCachingServiceProvider" --tag=config
Для работы необходимы кэш-драйверы поддерживающие тэгирование - это Memcached или Redis.
В .env
файле для Memcached указываем:
CACHE_DRIVER=memcached
для Redis:
CACHE_DRIVER=redis
Так же для работы Redis необходимо установить пакет predis/predis
:
composer require predis/predis
Чтобы закэшировать любой произвольный кусок HTML, нужн опросто передать в директиву @cache
ключ для кэширования фрагмента:
@cache('simple-cache')
<div>Это произвольный кусок HTML который будет закэширован по ключу "simple-cache"</div>
@endcache
Добавить в класс модели, которая будет кэшироваться, трейт NestedCacheable
:
use SlyDeath\NestedCaching\NestedCacheable;
class User extends Model
{
use NestedCacheable;
}
В шаблоне, для кэширования модели, необходимо передать в директиву @cache
её инстанс:
@cache($user)
<div>Кэширование модели App\User:</div>
<ul>
<li>Имя: {{ $user->name }}</li>
<li>Email: {{ $user->email }}</li>
</ul>
@endcache
Для кэширования модели на определённое время, указываем вторым параметром время жизни в минутах:
@cache($user, 1440)
<div>...</div>
@endcache
Чтобы при обновлении модели так же сбрасывался кэш "модели-родителя",
необходимо обновлять поле updated_at
у модели-родителя:
use SlyDeath\NestedCaching\NestedCacheable;
class CarUser extends Model
{
use NestedCacheable;
protected $touches = ['user']; // Указываем родителя
public function user()
{
return $this->belongsTo(User::class);
}
}
Пример использования:
resources/views/user.blade.php
@cache($user)
<section>
<h2>Автомобили пользователя {{ $user->name }}</h2>
<ul>
@foreach($user->cars as $car)
@include('user-car');
@endforeach
</ul>
</section>
@endcache
resources/views/user-car.blade.php
@cache($car)
<li>{{ $car->brand }}</li>
@endcache
Пример кэширования коллекции:
@cache($users)
@foreach ($users as $user)
@include('user');
@endforeach
@endcache