SlyDeath / laravel5-nested-caching by SlyDeath

Nested Caching для Laravel 5
1,047
1
3
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

Nested Caching для Laravel 5

Latest Stable Version Total Downloads License

Версии

Версия 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

Чтобы закэшировать любой произвольный кусок 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