在Symfony2中的控制器中缓存变量

时间:2014-10-20 23:02:13

标签: php symfony caching

是否可以将数据存储在控制器的一个私有变量中(Symfony2)?

一个例子:

/**
 * Class CatsController
 *
 * @Route("cats")
 * @Cache(expires="+600 seconds", public=true)
 * @package oTeuGato\AppBundle\Controller
 */
class CatsController extends Controller {

/**
 * @var $advertisements Advertisement[]
 */
private $advertisements;

/**
 * Index advertisements page
 *
 * @Route("", name="oTeuGato_Cats")
 * @Method("GET")
 * @return Response
 */
public function indexAction()
{
     $this->advertisements = ....(Use a service for gets advertisements)
}

/**
  * Index advertisements by page
  *
  * @Route("/{id}", requirements={"id" = "\d+"}, defaults={"id" = 1}, name="oTeuGato_Cats_ByPage")
  * @Method("GET")
  * @return Response
  */
 public function indexByPageAction(){
   ....
 }

在这个例子中,每当有人调用URL:控制器中的cats / 1时,我需要它们拥有之前调用的方法(/ cats)的所有广告。

这可能吗?

注意: 我在app.php文件和app_dev.php中启用了缓存。

感谢您的帮助,对不起我的英语;)

2 个答案:

答案 0 :(得分:1)

Symfony没有为您所描述的内容提供机制。但是,任何适用于PHP的解决方案都适用于Symfony。

这取决于您是否要记住每个用户或所有用户的广告。如果您想为每个用户记住它,请使用Gareth Parker建议的会话。如果你想为所有用户记住它,那么你需要APC用户缓存,内存缓存或其他基于内存的键值存储。

您也可以使用Doctrine结果缓存。见http://doctrine-orm.readthedocs.org/en/latest/reference/caching.html

答案 1 :(得分:0)

不,不是。反正不是那样的。您想要的是使用sessions代替。会话是用于在请求之间存储变量的方法。 Here是一些例子