2011-05-29 27 views
0

注意我指的是一個請求,而不是幾個請求和會話。在哪裏存儲在組件中創建的Doctrine變量,以便在任何地方都可訪問?

我有幾個組件需要Doctrine用戶對象,有些位於佈局中,其他位於模板中。有時候我需要這個Doctrine用戶對象。目前我已經添加了一個函數sfUser類從數據庫中加載該對象,這意味着每次我調用該函數時,我打電話給數據庫。我想知道在哪裏存儲這個對象,這樣我就可以訪問它,而無需每次需要時都查詢db。再次,我們談論的是單個請求,而不是幾個請求或需要會話的事情。

我可以將它保存在sfContext中嗎?任何其他地方,以便它可以在任何地方都可用?

+0

您不應將其存儲在sfContext中,因爲它沒有任何語義意義(sfContext表示Controller)。 – Dziamid 2011-05-29 14:14:35

回答

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(); 

而你總是以一個查詢結束。

+0

非常感謝! – DavidW 2011-06-03 23:26:34

0

您可以配置Doctrine cache,以便始終高速緩存此特定請求的結果。如果這麼好的話,如果你使用APC後端,你可以跨請求緩存。您還可以獲得查詢作爲獎勵緩存(這不是結果緩存,請仔細閱讀我提供的鏈接)!

相關問題