2011-12-01 50 views
1

如何在不使用sfContext::getInstance()的情況下在symfony模型中傳遞會話變量?如何在模型中獲得Symfony會話變量?

+3

一些更多的信息將受到歡迎?你的模型需要什麼樣的「會話」變量?它在哪裏創建/分配,需要什麼地方等等。因爲,當你在模型中需要'sfContext :: getInstance()'時,通常它是一個壞模型的標誌,就像你說的。 –

+1

你想做什麼?如果您想在會話期間保留一些值,您可以將它們作爲屬性添加到用戶,例如 –

+0

您是否在尋找使用管理生成器創建的後端應用程序? – macgyver

回答

2

推薦的方法被稱爲依賴注入,並且是這樣的:你創建的模型文件setUser()方法,即節省了給定參數的私有財產:

class Foo { 
    private $_user; 

    public function setUser(myUser $user) { 
    $this->_user = $user; 
    } 

    // ... later: 

    public function save(Doctrine_Connection $conn = null) { 
    // use $this->_user to whatever you need 
    } 
} 

這看起來笨拙, 因爲它是。但是沒有你回答這個問題,你想做什麼?我不能給出替代方案。

推薦的文章:

+0

嗨maerlyn ...如上所述我在lib類中使用userid setAttribute ...我需要在保存方法內訪問模型類中的會話...但我知道sfContext :: getInstance()是壞主意,所以我正在尋找替代.. – Pushparaj

+0

我明白,並給了你一個選擇。但沒有告訴你爲什麼需要這個ID,我不能給出更好的選擇。 – Maerlyn

+0

@Maerlyn:我以同樣的方式嘗試過。但是我無法在模型中獲得用戶ID。$ this - > _ user在保存函數時返回空。幫幫我。 – Gowri

-1

會話變量應該存儲爲用戶的屬性。

// in an action: 
$this->getUser()->setAttribute('current_order_id', $order_id); 

看看如何找回來。

// later on, in another action, you can get it as: 
$order_id = $this->getUser()->getAttribute('current_order_id', false); 
if($order_id!==false) 
{ 
    // save to DB 
} else { 
    $this->getUser()->setFlash('error', 'Please selected an order before you can do stuff.'); 
    // redirect and warn the user to selected an order 
    $this->redirect('orders'); 
} 
+1

這絕不是問題的答案。 – Maerlyn

+0

Pibeiro並沒有尋找答案你給...我要求在保存方法內使用sfContext :: getInstance()來獲取模型類中的會話... – Pushparaj

+0

但是從哪裏存儲模型?你必須從行動中保存它嗎? –