Symfony:关于表单过滤器的问题

时间:2010-07-09 16:56:59

标签: forms symfony1 doctrine filter

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

我想在该列表中隐藏会话的用户。我怎么能够 做到了吗?

我的第一个想法是为每个人创建一个函数addXXXXColumnQuery() 表单的字段,并在每一个中添加如下行:

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

$ id是当前会话的用户的ID。但就这样我 发现我在重复自己。

我该怎么办?

1 个答案:

答案 0 :(得分: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;
}