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