【问题标题】:FOSHttpCache with Symfony reverse proxy带有 Symfony 反向代理的 FOSHttpCache
【发布时间】:2017-04-11 20:55:35
【问题描述】:

所以我尝试使用默认的 Symfony HttpCache 配置 FOSHttpCacheBundle (latest release ^2.0)

这里是我根据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 消息:PHP Catchable 致命错误:参数 2 传递给 Symfony\Component\HttpKernel\HttpCache\HttpCache::__construct() 必须 成为一个实例 Symfony\Component\HttpKernel\HttpCache\StoreInterface,没有给出, 在第 11 行调用 /php/api/current/web/app.php 并在 /php/api/current/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php 在第 78 行

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

所以问题是,是不是文档不是最新的,还是只是我遗漏了一些非常明显的东西?

【问题讨论】:

    标签: php symfony caching foshttpcachebundle


    【解决方案1】:
    use Symfony\Component\HttpKernel\HttpCache\Store;
    
    $kernel = new AppKernel('dev', true);
    $kernel->loadClassCache();
    $store = new Store('app/cache');
    $kernel = new AppCache($kernel, $store);
    

    【讨论】:

    • 这个解决方案应该是官方文档的一部分!
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多