如何将“memcache”注入service.yml?

时间:2017-03-27 02:05:04

标签: php symfony session memcached session-cookies

我安装了memcache lib并将其添加到

framework:  
    session:
        handler_id: session.handler.memcache

但是当我尝试使用它时,我收到此错误

  [Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException]  
  You have requested a non-existent service "session.handler.memcache".       

2 个答案:

答案 0 :(得分:1)

您想使用memcache还是memcached? 这是两个不同的扩展,所以要注意这一点。 我建议使用memcachedmemcache已经死了。

未定义服务session.handler.memcache,因此您必须定义一个实施SessionHandlerInterface,在您的情况MemcacheSessionHandler

首先,我们需要将memcache实例定义为服务,因此我们可以将其传递给MemcacheSessionHandler构造函数:

memcache:
    class: \Memcache
calls:
    - [ addServer, [ %host_parameter%, %port_parameter% ]]

然后,您的会话处理程序:

session.handler.memcache:
        class: Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcacheSessionHandler
        arguments: [@memcache]

您还可以使用像cache/adapter-bundle这样的包来注册PSR-6兼容服务(甚至是3.1中引入的symfony缓存组件)并使用Psr6SessionHandler

如果您想使用memcached,它的配置几乎相同。

答案 1 :(得分:0)

Symfony有其自己的组件:https://symfony.com/doc/current/components/cache.html

您必须先在/config/packages/framework.yaml中对其进行配置:

framework:
  cache:
    pools:
      memcached_service:
        adapter: cache.adapter.memcached
        public: true
        provider: 'memcached://memcached:11211'

现在,您可以在任意位置(services.yaml)注入Memcached服务:

App\Service\SomeService:
  arguments:
    - "@memcached_service"