【问题标题】:Symfony: question about the form filtersSymfony:关于表单过滤器的问题
【发布时间】:2010-07-09 16:56:59
【问题描述】:

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

我想在该列表中隐藏会话的用户。我怎样才能 做吗?

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

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

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

我该怎么办?

【问题讨论】:

    标签: forms symfony1 doctrine filter


    【解决方案1】:

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

    当您在操作中实例化表单时,将 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      相关资源
      最近更新 更多