2017-04-11 49 views
0

所以我试图用缺省的Symfony HttpCache配置FOSHttpCacheBundle (latest release ^2.0)带有Symfony反向代理的FOSHttpCache

下面是根据the docs我AppCache.php的内容:

<?php 

use FOS\HttpCache\SymfonyCache\CacheInvalidation; 
use FOS\HttpCache\SymfonyCache\EventDispatchingHttpCache; 
use FOS\HttpCache\SymfonyCache\DebugListener; 
use FOS\HttpCache\SymfonyCache\CustomTtlListener; 
use FOS\HttpCache\SymfonyCache\PurgeListener; 
use FOS\HttpCache\SymfonyCache\RefreshListener; 
use FOS\HttpCache\SymfonyCache\UserContextListener; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpKernel\HttpCache\HttpCache; 
use Symfony\Component\HttpKernel\HttpKernelInterface; 
use Symfony\Component\HttpKernel\HttpCache\StoreInterface; 
use Symfony\Component\HttpKernel\HttpCache\SurrogateInterface; 

class AppCache extends HttpCache implements CacheInvalidation 
{ 
    use EventDispatchingHttpCache; 

    /** 
    * Overwrite constructor to register event listeners for FOSHttpCache. 
    */ 
    public function __construct(
     HttpKernelInterface $kernel, 
     StoreInterface $store, 
     SurrogateInterface $surrogate = null, 
     array $options = [] 
    ) { 
     parent::__construct($kernel, $store, $surrogate, $options); 

     $this->addSubscriber(new CustomTtlListener()); 
     $this->addSubscriber(new PurgeListener()); 
     $this->addSubscriber(new RefreshListener()); 
     $this->addSubscriber(new UserContextListener()); 
     if (isset($options['debug']) && $options['debug']) { 
      $this->addSubscriber(new DebugListener()); 
     } 
    } 

    /** 
    * Made public to allow event listeners to do refresh operations. 
    * 
    * {@inheritDoc} 
    */ 
    public function fetch(Request $request, $catch = false) 
    { 
     return parent::fetch($request, $catch); 
    } 
} 

现在根据Symfony docs,使高速缓存代理只是一个设定app.php文件如下的物质(取消注释最后一行):

$kernel = new AppKernel('prod', false); 
$kernel->loadClassCache(); 
$kernel = new AppCache($kernel); 

,给了我一个很好的:

PHP message: PHP Catchable fatal error: Argument 2 passed to Symfony\Component\HttpKernel\HttpCache\HttpCache::__construct() must be an instance of Symfony\Component\HttpKernel\HttpCache\StoreInterface, none given, called in /php/api/current/web/app.php on line 11 and defined in /php/api/current/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php on line 78

考虑到HttpCache类构造函数,这是非常有意义的。

所以问题是,它是不是最新的文档,还是只是我失去了一些真正明显的东西?

回答

2
use Symfony\Component\HttpKernel\HttpCache\Store; 

$kernel = new AppKernel('dev', true); 
$kernel->loadClassCache(); 
$store = new Store('app/cache'); 
$kernel = new AppCache($kernel, $store); 
+0

谢谢!它确实有效。 – SebScoFr

+0

此解决方案应该是官方文档的一部分! – Pointi