0

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

您将如何缓存所有这些响应?

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

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

4

1 回答 1

1

您可以使用 SonataCacheBundle 作为缓存提供者,并替换 forward 方法:

默认示例:

<?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;
    }
}
于 2013-02-01T06:43:13.413 回答