2010-07-09 3 views
1

В интерфейсе у меня есть страница со списком и фильтром формы рядом с ней , который показывает всех пользователей социальной сети.Symfony: вопрос об фильтрах формы

Я хотел бы скрыть пользователя сеанса в этом списке. Как я могу это сделать ?

Моя первая мысль создания функции, addXXXXColumnQuery() для каждого поля формы, и в каждой из них добавить строку:

->andWhere("u.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)); 
    ... 

Получить идентификатор пользователя из контекста внутри формы:

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

Я предпочитаю прежний метод, потому что он чище и меньше WTFy.

После того, как у вас есть идентификатор пользователя, переопределяют doBuildQuery исключить текущий идентификатор пользователя внутри вашего FormFilter:

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; 
} 
Смежные вопросы