在使用Symfony 1.4中的sfGuardUserProfile插件时,如何根据sfGuard字段进行过滤?
按照我所认为的标准,我创建了一个sf_guard_user_profile表来保存名字、姓氏等字段。
我有一个相当库存的用户列表为我的管理索引页面。我可以很好地按用户名过滤。但是我不能按last_name这样的sf_guard_user_profile表中的字段进行过滤。
我的generator.yml看起来像
generator:
class: sfPropelGenerator
param:
model_class: sfGuardUser
config:
list:
display: [=username, first_name, last_name, last_login, role]
batch_actions: []
filter:
display: [username]
form:
class: myGuardUserAdminForm我可以通过将字段更改为:
filter:
class: sfGuardUserProfileFormFilter但是,当我使用有效的last_name值提交表单时,它不会过滤。返回所有记录。
发布于 2012-07-21 21:10:06
添加sfGuardUserProfileFormFilter作为过滤器类不是过滤first_name、last_name和其他配置文件字段的正确方式。
相反,您必须在筛选器显示列表中添加需要筛选的字段,如下所示:
filter:
display: [username, first_name, last_name]然后,您必须在sfGuardUserFormFilter中合并sfGuardUserProfileFormFilter
public function configure()
{
parent::configure();
$this->mergeForm(new sfGuardUserProfileFormFilter());
}最后,为要过滤的合并表单sfGuardUserProfileFormFilter的每个字段在sfGuardUserFormFilter中添加一个函数addMyFieldColumnCriteria (Propel notation)。对于first_name,我们有:
protected function addFirstNameColumnCriteria(Criteria $criteria, $field, $values)
{
if (!is_array($values))
return;
$criteria->addJoin(sfGuardUserPeer::ID, sfGuardUserProfilePeer::USER_ID, Criteria::INNER_JOIN);
if (isset($values['is_empty']) && $values['is_empty'])
{
$criteria->add($field, null, Criteria::ISNULL);
$criteria->addOr($field, '', Criteria::EQUAL);
}
else
{
$value = $values['text'];
if ($value == '')
return;
$criteria->add($field, '%'.$value.'%', Criteria::LIKE);
}
}https://stackoverflow.com/questions/11567995
复制相似问题