Files
helpers-plugin/classes/observer/BaseObserver.php

81 lines
3.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php namespace Wpstudio\Helpers\Classes\Observer;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Cache;
abstract class BaseObserver implements Observer
{
protected static string $class;
public static function clearCache(?Model $model = null, ?array $additionalPieces = []): void
{
Cache::tags(
static::getCacheTag(
!is_null($model) ? $model->getKey() : null,
$additionalPieces,
true
)
)->flush();
}
/**
* @param int|Collection|array|null $identifiers
* @param array|null $additionalPieces
* @param bool $excludeBaseClassNameTagWithoutIdentifiers - это опция нужна, если вы хотите исключить имя базового класса обсервера из результирующего набора тегов
* @desc $excludeBaseClassNameTagWithoutIdentifiers - выключает из результирующего массива тег кеша только с базовым классом, если переданы идентификаторы
* @desc То есть в итоговой выборке - не будет тега, без идентификатора, если вообще идентификаторы переданы
* @return array
*/
public static function getCacheTag($identifiers = null, ?array $additionalPieces = [], bool $excludeBaseClassNameTagWithoutIdentifiers = false): array
{
return static::getCacheTagsWithMaybeIdentifiers(static::getClass(), $identifiers, $additionalPieces, $excludeBaseClassNameTagWithoutIdentifiers);
}
public static function formatCacheTag(array $pieces): string
{
return implode('.', $pieces);
}
/**
* @param int|Collection|array|null $value
* @return array
*/
private static function forceArray($value = null): array
{
return $value instanceof Collection ? $value->toArray() : (array)$value;
}
/**
* @param string $baseClassName
* @param int|Collection|array|null $iterateIdentifiers
* @param array|null $additionalTagPieces
* @param bool $excludeBaseClassNameTagWithoutIdentifiers
* @return array
*/
private static function getCacheTagsWithMaybeIdentifiers(string $baseClassName, $iterateIdentifiers = [], ?array $additionalTagPieces = [], bool $excludeBaseClassNameTagWithoutIdentifiers = false): array
{
$iterateIdentifiers = static::forceArray($iterateIdentifiers);
$cacheTags = [];
if (!$excludeBaseClassNameTagWithoutIdentifiers || !$iterateIdentifiers) {
$cacheTags = (array)static::formatCacheTag(array_merge([$baseClassName], $additionalTagPieces));
}
if ($iterateIdentifiers) {
$cacheTags = array_merge(
$cacheTags,
array_map(
fn ($identifier) => static::formatCacheTag(
array_merge([$baseClassName, $identifier], $additionalTagPieces)
),
$iterateIdentifiers
)
);
}
return $cacheTags;
}
}