在我的Symfony 5应用程序中,我想为不同的任务使用不同的缓存,当然也要为不同的环境使用。
例如,我的配置如下:
framework:
cache:
pools:
cache.auth:
adapter: cache.adapter.redis
provider: app.my_custom_redis_provider
cache.sap:
adapter: cache.adapter.redis
provider: app.my_custom_redis_provider
services:
app.my_custom_redis_provider:
arguments:
- '%env(REDIS_URL)%'
-
retry_interval: 2
timeout: '%env(REDIS_TIMEOUT)%'
class: Redis
factory:
- SymfonyComponentCacheAdapterRedisAdapter
- createConnection
我在类中使用依赖项注入。那么,我该如何定义特定类使用这两个缓存池中的哪一个呢?
现在我得到的缓存是这样的:
class SapListService implements ListServiceInterface
{
use LoggerTrait;
private CountryServiceInterface $countryService;
private CurrencyServiceInterface $currencyService;
public function __construct(
SapClientFactoryInterface $sapClient,
CacheItemPoolInterface $cache,
ParameterBagInterface $params
) {
$sapUser = $params->get('sap_user');
$sapPw = $params->get('sap_pw');
$urlStruktur = $params->get('sap_struktur');
$this->countryService = $sapClient->getCountryService($sapUser, $sapPw, $urlStruktur, $cache);
$this->currencyService = $sapClient->getCurrencyService($sapUser, $sapPw, $urlStruktur, $cache);
}
如何将SapListService
配置为使用cache.sap池?
这在文档中有解释。
每个自定义池都将成为一个服务,其服务ID是池的名称(例如custom_thing.cache(。还将使用名称的驼色大小写版本为每个池创建一个自动连接别名,例如custom_hing.cache可以通过命名参数$customThingCache并键入Symfony\Comments\cache\CacheInterface或Psr\Cache\CacheItemPool接口:
因此,在您的情况下,您可以键入提示:
PsrCacheCacheItemPoolInterface $cacheSap
如果您想根据环境等更改缓存池,那么类型提示将没有帮助。
但是您可以使用已定义的池更改服务定义:
# services.yaml
AppServiceSapListService:
arguments:
$cache: '@cache.auth'
# services_local.yaml
AppServiceSapListService:
arguments:
$cache: '@cache.sap'