Symfony: вопрос о фильтрах формы

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

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

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

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

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

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

1
задан Peter Mortensen 19 August 2010 в 10:30
поделиться

1 ответ

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

Передать user_id в качестве опции при создании формы, внутри экшена:

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

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

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

Я предпочитаю первый метод, потому что он чище и менее WTFy.

Как только вы получили id пользователя, переопределите doBuildQuery, чтобы исключить текущий id пользователя внутри вашего 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;
}
2
ответ дан 2 September 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: