Forms 关于表单过滤器的问题

Forms 关于表单过滤器的问题,forms,symfony1,doctrine,filter,Forms,Symfony1,Doctrine,Filter,在前端,我有一个页面,旁边有一个列表和一个表单过滤器 显示社交网络的所有用户 我想在该列表中隐藏会话的用户。我怎么能 怎么办 我的第一个想法是为每个 字段,并在每个字段中添加如下行: ->andWhere("u.id <> ?", $id) ->和何处(“u.id?”,$id) $id是当前会话的用户id。但是这样我 发现我在重复我自己 我该怎么办 首先,您需要让用户进入过滤器。您有两个选择: 在操作内实例化表单时,将用户id作为选项传入: public function

在前端,我有一个页面,旁边有一个列表和一个表单过滤器 显示社交网络的所有用户

我想在该列表中隐藏会话的用户。我怎么能 怎么办

我的第一个想法是为每个 字段,并在每个字段中添加如下行:

->andWhere("u.id <> ?", $id)
->和何处(“u.id?”,$id)
$id是当前会话的用户id。但是这样我 发现我在重复我自己


我该怎么办

首先,您需要让用户进入过滤器。您有两个选择:

在操作内实例化表单时,将用户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();
我更喜欢前一种方法,因为它更干净,也不太脏

获得用户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;
}