【问题标题】: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;
}