如何(http?)缓存转发的请求/响应?

时间:2013-01-31 23:38:29

标签: caching symfony symfony-2.1

我有这个控制器方法,需要使用$response = $this->forward()调用许多其他方法(有时在其他控制器中)来生成更大的响应。

你会如何缓存所有这些回复?

例如,每个方法应该处理自己的缓存吗?如果在其他方法中也需要该方法,或者甚至作为独立方法,那将是很好的。

无论哪种方式,我该怎么做?我想在这种情况下,http缓存不起作用。

1 个答案:

答案 0 :(得分:1)

您可以使用SonataCacheBundle作为缓存提供程序,并替换正向方法:

默认示例:

<?php

namespace Acme\DemoBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

/**
 * Controller class
 */
abstract class BaseController  extends Controller
{
    /**
     * {@inheritDoc}
     */
    public function forward($controller, array $path = array(), array $query = array())
    {
        // Create a cache key
        $key = $controller . md5(serialize($path)) . md5(serialize($query));

        $cacheProvider =// Get cache provider (Can SonataCacheBundle)

        if (false !== $data = $cacheProvider->get($key)) {
            return $data;
        }

        $data = parent::forward($controller, $path, $query);
        $cacheProvider->set($key, $data, time() + 3600);

        return $data;
    }
}