Как безопасно переопределить CacheManager Laravel для поддержки кеша с поддержкой арендаторов в Stancl Tenancy?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как безопасно переопределить CacheManager Laravel для поддержки кеша с поддержкой арендаторов в Stancl Tenancy?

Сообщение Anonymous »

Я использую пакет stancl/tenancy в приложении Laravel v12, и мне нужно применить область видимости, специфичную для клиента, к кэшированным значениям. По умолчанию пакет переопределяет CacheManager Laravel для применения tags() на основе идентификатора арендатора.
Однако этот подход дает сбой при использовании драйверов кэша, таких как база данных, которые не поддерживают тегирование, выдавая:

Код: Выделить всё

BadMethodCallException: This cache store does not support tagging.
Я пытался переопределить CacheManager с помощью app()->extend('cache', ...) в моем поставщике услуг, но он инициализируется до загрузки аренды, в результате чего tenant() возвращает значение null, что приводит к:

Код: Выделить всё

Call to a member function getTenantKey() on null
Что мне нужно:
  • Надежный способ переопределить или обернуть диспетчер кэша Laravel для добавления области действия на основе арендатора только тогда, когда клиент разрешен, и только когда магазин поддерживает тегирование.
  • Запасное решение для магазинов, которые не поддерживают тегирование (например, добавление префикса ключа кэша) вручную).
Каков наилучший подход для достижения этой цели, не нарушая систему кэширования Laravel или жизненный цикл аренды?
Любые рекомендации или лучшие практики будут очень признательны.
Я создал собственный TenantCacheManager, который проверяет, поддерживает ли базовое хранилище теги (supportsTags()), и возвращается к ручному добавлению префикса ключа кэша, если это не так. Я ожидал, что это обеспечит беспрепятственное использование кэша для конкретного клиента без ошибок, независимо от драйвера хранилища.
Однако экземпляр пользовательского менеджера все равно был создан слишком рано, до того, как клиент был разрешен, что привело к тому, что tenant() вернул значение null и произошел сбой. Я также попытался условно переопределить привязку внутри поставщика услуг, но было слишком поздно или неэффективно.

Подробнее здесь: https://stackoverflow.com/questions/797 ... cache-in-s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»