Symfony: вопрос о фильтрах форм - PullRequest
1 голос
/ 09 июля 2010

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

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

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

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

$ id - это идентификатор пользователя текущего сеанса. Но таким образом я обнаружил, что я повторяюсь.

Что мне делать?

1 Ответ

2 голосов
/ 10 июля 2010

Во-первых, вам нужно включить пользователя в фильтр. У вас есть два варианта:

Передайте 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;
}
...