Symfony - MemcachedAdapter :: __ construct () должен быть экземпляром Memcached, строка дана - PullRequest
0 голосов
/ 31 октября 2018

Это довольно странно. Я настроил кеширование с Memcached следующим образом:

framework.yaml

framework:
    cache:
        app: app.memcached_adapter

services.yaml

app.memcached_client:
    class: Memcached
    factory: 'Symfony\Component\Cache\Adapter\MemcachedAdapter::createConnection'
    arguments: [['%app.memcached.dsn.1%', '%app.memcached.dsn.2%']]
    public: true

app.memcached_adapter:
    class: Symfony\Component\Cache\Adapter\MemcachedAdapter
    arguments:
        - '@app.memcached_client'
    public: true

Я могу очистить кеш в терминале без каких-либо ошибок, но когда я загружаю свой сайт, я получаю следующее:

Type error: Argument 1 passed to Symfony\Component\Cache\Adapter\MemcachedAdapter::__construct() 
must be an instance of Memcached, string given, called in 
/users/me/project/please-dont-mention-the-company/sports/var/cache/lcl/ContainerXqbuh45/srcLclDebugProjectContainer.php 
on line 1029

Посмотрев в указанный сгенерированный контейнерный класс, я нашел это:

/**
 * Gets the public 'cache.app' shared service.
 *
 * @return \Symfony\Component\Cache\Adapter\TraceableAdapter
 */
protected function getCache_AppService()
{
    return $this->services['cache.app'] = new \Symfony\Component\Cache\Adapter\TraceableAdapter(new \Symfony\Component\Cache\Adapter\MemcachedAdapter('kRTmoLLARw'));
}

Понятия не имею, как она генерируется с этой строкой в ​​качестве аргумента, это должен быть клиент memcached!

Есть идеи? Что-нибудь, что я могу проверить без отладки генерации класса контейнера?

1 Ответ

0 голосов
/ 10 декабря 2018

вы пытались получить CacheAdapter из Service-Container вместо создания нового экземпляра здесь: return $this->services['cache.app'] = new \Symfony\Component\Cache\Adapter\TraceableAdapter( new \Symfony\Component\Cache\Adapter\MemcachedAdapter('kRTmoLLARw') // new instance? );

...