Files
helpers-plugin/classes/observer/BaseObserver.php
dimti 1aa28d694d + make getCacheTag a more smarts - accepts identifiers and returned cache tags with base class name and an addition - more tags with base class name and accepted identifiers
* getCacheTag return array
* clear cache accepted unnecessary model argument - if it presented - then clear cache only by cache tag with passed model id
+ some helper methods, like a formatCacheTag, forceArray for string or collection conversion into array
2022-12-15 09:25:31 +03:00

81 lines
2.9 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): void
{
Cache::tags(
static::getCacheTag(
!is_null($model) ? $model->getKey() : null,
[],
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;
}
}