Symfony3:如何以正确的方式启用 PDO/Doctrine 缓存适配器?

Symfony3: How to enable PDO/Doctrine cache adapter, the right way?

喂!

我正在尝试在 Symfony 3.4 中获取缓存适配器 运行。我在这个项目中使用了 doctrine,所以似乎可以使用那个适配器(我在 2 个容器中有这个服务 运行,所以我需要一个缓存系统,这两个容器可以访问......并且有没有 Redis/Memcache...所以请不要对此提出任何建议 ;))。

这里是我做的配置的相关部分:

 services:
      cache.adapter.pdo:
        class: Symfony\Component\Cache\Adapter\PdoAdapter
        arguments: [ '@doctrine.dbal.default_connection' ]
      blahfu.using.cache:
        class: App\HeavyCacheUser
        arguments: [ '@app.cache' ]
    

framework:
  cache:
    app: cache.adapter.pdo
    
doctrine:
  dbal:
    default_connection: default
    connections:
      default:...
      ...

我也添加了migration来添加对应的table: 使用以下查询(如 src/Symfony/Component/Cache/Traits/PdoTrait.php 中所示):

CREATE TABLE cache_items (
  item_id VARBINARY(255) NOT NULL PRIMARY KEY, 
  item_data MEDIUMBLOB NOT NULL, 
  item_lifetime INTEGER UNSIGNED, 
  item_time INTEGER UNSIGNED NOT NULL
) COLLATE utf8_bin, ENGINE = InnoDB 

当我尝试使用它时,我只得到缓存未命中....

示例:

$cacheKey = 'blahfu.bar';

$item = $this->cache->getItem($cacheKey);

if (!$item->isHit()) {
  // Do $stuff
  
  $item->set($stuff)->expiresAfter(900);
  $this->cache->save($item);
  Logger::info('Cache miss');
} else {
  Logger::info('Cache hit');
}

return $item->get();

我错过了什么?

感谢您的帮助:)

我找到了如何让它工作的方法。经过一天的调试,似乎在 symfony 3.4 中,使用该应用程序的服务获得了一个命名空间而不是给定的连接,因为在 symfony 的 DI 组件中,它没有实现使用 PDOAdapter。

我现在所做的是将 PDOAdapter 服务直接注入到需要的服务中:

services:
      cache.adapter.pdo:
        class: Symfony\Component\Cache\Adapter\PdoAdapter
        arguments: [ '@doctrine.dbal.default_connection' ]
      blahfu.using.cache:
        class: App\HeavyCacheUser
        arguments: [ '@cache.adapter.pdo' ]

然后当然是注入它(我之前也做过但没有提到):

use Symfony\Component\Cache\Adapter\AdapterInterface;

class HeavyCacheUser
  private $cache;
  public function __construct(AdapterInterface $cacheAdapter){
    $this->cache = $cache;
  }

愿它能帮助受苦的其他人^^