Как разделить Redis Connection / RedisCache в Symfony между службами / контроллерами?

Я согласен с ответом от zacherates.

Но вы можете сделать вызов intern () в ваших нелиберальных строках.

Из примера zacherates:

// ... but they are not the same object
new String("test") == "test" ==> false 

Если вы ставите нелитеральное равенство строки, это правда

new String("test").intern() == "test" ==> true 
0
задан Lasse Moos 17 January 2019 в 10:20
поделиться

1 ответ

Вы должны сделать Redis-кеш сервисом, а потом внедрить его в свои контроллеры (или других зависимых). При необходимости обратитесь к документам Symfony о внедрении зависимостей .

Вот пример, вам, возможно, потребуется настроить его позже:

# config/services.yaml
services:
    redis_connection:
        class: 'RedisConnection'
        factory: ['RedisAdapter', createConnection]
        arguments: 
          - '%env(REDIS_URL)%'

    redis_cache:
        class: 'RedisCache'
        arguments:
          - '@redis_connection'

Обратите внимание, что я не знаю, какие пространства имен имеют ваши классы, поэтому вам придется настроить конфиг соответственно.

И тогда вам также нужно будет настроить среду для внедрения службы в ваши контроллеры (или другие иждивенцы):

# config/services.yaml
services:
  # ...
  App\Controller\ExampleController:
      arguments:
        - '@logger'
        - '@redis_cache'

Кроме того, вы должны обновить контроллеры для принятия нового аргумента в конструкторе например:

public function __construct(LoggerInterface $logger, RedisCache $cache)
{
    $this->logger = $logger;
    $this->cache = $cache;
}

Если у вас есть какие-либо вопросы, обратитесь к документации по контейнера услуг .

0
ответ дан kix 17 January 2019 в 10:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: