2010-07-09 66 views
1

在前端,我有一個頁面,其中包含一個列表和一個表單過濾器旁邊的 ,它顯示了社交網絡的所有用戶。Symfony:關於表單過濾器的問題

我想在該列表中隱藏會話的用戶。我如何 做到這一點?

我首先想到的是創建一個功能,addXXXXColumnQuery(),對錶格的每一 領域,每一個添加一行:

->andWhere("u.id <> ?", $id) 

$ ID是當前用戶的ID會話。但通過這種方式,我發現我在重複自己。

我該怎麼辦?

回答

2

首先,您需要讓用戶進入過濾器。你有兩個選擇:

傳遞USER_ID作爲一個選項,當你實例的形式,動作裏面:

public function executeList(sfWebRequest $request) 
{ 
    $user_id = $this->getUser()->getUserId(); 
    $filter = new ModelFormFilter(array(), array('user_id' => $user_id)); 
    ... 

從上下文獲取表單內的用戶ID:

sfContext::getInstance()->getUser()->getUserId(); 

我更喜歡前一種方法,因爲它更乾淨,更少WTFy。

一旦你的用戶ID,覆蓋doBuildQuery排除您FormFilter內的當前用戶ID:

protected function doBuildQuery(array $values) 
{ 
    $query = parent::doBuildQuery($values); 
    $user_id = $this->getOption('user_id'); //or off the context here 
    if ($user_id) 
    { 
    $query->addWhere('r.user_id != ?', $user_id); 
    } 

    return $query; 
}