注意我指的是一个请求,而不是几个请求和会话。
我有几个需要Doctrine用户对象的组件,一些位于布局中,另一些位于模板中。有时我需要使用Doctrine用户对象。目前我已经向sfUser类添加了一个函数,该函数从数据库加载该对象,这意味着每次调用该函数时我都会调用db。我想知道在哪里存储这个对象,这样我就可以访问它,而不必在每次需要时查询db。同样,我们讨论的是单个请求,而不是几个请求或需要会话的内容。
我能以某种方式将其保存在sfContext中吗?任何其他地方,以便它可以在任何地方使用?
答案 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后端,那么您将在请求中缓存。您还可以查询缓存作为奖励(这不是结果缓存,请仔细阅读我提供的链接)!