我有这个控制器方法,需要使用$response = $this->forward()
调用许多其他方法(有时在其他控制器中)来生成更大的响应。
你会如何缓存所有这些回复?
例如,每个方法应该处理自己的缓存吗?如果在其他方法中也需要该方法,或者甚至作为独立方法,那将是很好的。
无论哪种方式,我该怎么做?我想在这种情况下,http缓存不起作用。
答案 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;
}
}