在哪里存储在组件中创建的Doctrine变量,以便可以在任何地方访问它?

时间:2011-05-29 03:38:01

标签: symfony1 symfony-1.4

注意我指的是一个请求,而不是几个请求和会话。

我有几个需要Doctrine用户对象的组件,一些位于布局中,另一些位于模板中。有时我需要使用Doctrine用户对象。目前我已经向sfUser类添加了一个函数,该函数从数据库加载该对象,这意味着每次调用该函数时我都会调用db。我想知道在哪里存储这个对象,这样我就可以访问它,而不必在每次需要时查询db。同样,我们讨论的是单个请求,而不是几个请求或需要会话的内容。

我能以某种方式将其保存在sfContext中吗?任何其他地方,以便它可以在任何地方使用?

2 个答案:

答案 0 :(得分:1)

您可以将它存储在模型的Table类中,因为表总是作为单例访问。

class sfGuardUserTable extends PluginsfGuardUserTable
{
  protected $specialUser = null;

  public function getSpecialUser()
  {
    if (null === $this->specialUser)
    {
      $this->specialUser = $this->findOneById(1);
    }
    return $this->specialUser;
  }
}

现在,您可以在以下操作和组件中使用它:

$u = sfGuardUserTable::getInstance()->getSpecialUser();

你总会得到一个查询。

答案 1 :(得分:0)

您可以配置Doctrine cache,以便始终缓存此特定请求的结果。如果这么好的话,如果您使用APC后端,那么您将在请求中缓存。您还可以查询缓存作为奖励(这不是结果缓存,请仔细阅读我提供的链接)!