【问题标题】:how to inject "memcache" to service.yml?如何将“memcache”注入service.yml?
【发布时间】:2017-08-19 14:18:37
【问题描述】:

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

framework:  
    session:
        handler_id: session.handler.memcache

但是当我尝试使用它时,我得到了这个错误

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

【问题讨论】:

    标签: php symfony session memcached session-cookies


    【解决方案1】:

    您想使用memcachememcached? 这是两个不同的扩展,因此请注意这一点。 我建议使用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,在配置方面几乎是一样的。

    【讨论】:

    • 注射后出现此错误? [Symfony\Component\DependencyInjection\Exception\RuntimeException] “调用”的定义没有类。如果您打算在运行时动态注入此服务,请将其标记为 synthet=true。如果这是一个子定义单独使用的抽象定义,请添加abstract=t rue,否则指定一个类来消除这个错误。
    • 但我现在收到此错误服务“memcache”依赖于不存在的参数“host_p arameter”。
    • %host_parameter% 表示一个名为host_parameter 的参数。您可以使用自己的名称 (memcache_host?) 在 app/config/parameters.yml.dist 中定义参数(带有示例值),然后在 app/config/parameters.yml 中使用适当的值。 symfony.com/doc/current/service_container/parameters.html
    • 我得到这个错误 由于类名无效('\\Memcache'),无法转储定义,因为这一行类:\Memcache
    【解决方案2】:

    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'
    

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 2020-01-02
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多