Filter中的覆盖方法

时间:2012-01-04 13:51:21

标签: php symfony1 doctrine symfony-1.4

我在我的数据库中有一个表Test,其中包含以下字段:

 id | name
 1  | YW55IGNhcm5hbCBwbGVhcw==
 2  | fghfghgcm5hbCBwbGVhcw==

使用base64对名称进行哈希处理。在我的模型中,我可以覆盖这种方法:

public function getName() {
        return base64_decode($this->getName);
}

并在函数保存中:

$this->setName(base64_encode($this->getName));

这工作正常,但我在管理生成器中使用过滤器时遇到很大问题。如果我为过滤器名称键入了NAME,例如“stackoverflow”,那么这将使用“stackoverflow”而不是base64_encode('stackoverflow')进行查询。有可能覆盖这个吗?如果是,怎么样?

我使用Symfony 1.4和Doctrine。

2 个答案:

答案 0 :(得分:0)

在该字段的doBuildQuery子类中重载sfFormFilterDoctrine,以便按编码值进行查询。

http://trac.symfony-project.org/browser/branches/1.4/lib/plugins/sfDoctrinePlugin/lib/form/sfFormFilterDoctrine.class.php#L148

编辑:或者,您可以重载addTextQuery。无论哪种方式,在评论中清楚地解释业务逻辑

答案 1 :(得分:-1)

尝试查看SHA1加密。请求看起来像SELECT * FROM Test WHERE name=SHA1(".$myNameFromAdmin.");

还有一个:你不需要public function getName() - 这是base64_decode()的别名