Php 过滤器中的覆盖方法
我的数据库中有一个带有以下字段的表测试:Php 过滤器中的覆盖方法,php,symfony1,doctrine,symfony-1.4,Php,Symfony1,Doctrine,Symfony 1.4,我的数据库中有一个带有以下字段的表测试: id | name 1 | YW55IGNhcm5hbCBwbGVhcw== 2 | fghfghgcm5hbCBwbGVhcw== 使用base64对名称进行散列。在我的模型中,我可以覆盖此方法: public function getName() { return base64_decode($this->getName); } 在功能保存中: $this->setName(base64_encode($th
id | name
1 | YW55IGNhcm5hbCBwbGVhcw==
2 | fghfghgcm5hbCBwbGVhcw==
使用base64对名称进行散列。在我的模型中,我可以覆盖此方法:
public function getName() {
return base64_decode($this->getName);
}
在功能保存中:
$this->setName(base64_encode($this->getName));
这是工作正常,但我有很大的问题,过滤器在管理生成器。如果我键入过滤器名称exist name,例如“stackoverflow”,那么这将使用“stackoverflow”而不是base64_encode('stackoverflow')进行查询。有可能覆盖这个吗?如果是,如何进行
我使用Symfony 1.4和Doctrine。尝试查看SHA1加密。请求看起来像
SELECT*fromtest,其中name=SHA1(“.$myNameFromAdmin”)代码>
还有一点:您不需要公共函数getName()
——这是该字段的sfFormFilterDoctrine
子类中base64_decode()的别名,这样它就可以根据编码值进行查询
编辑:或者,您可以重载addTextQuery
。无论哪种方式,请在注释中清楚地解释业务逻辑在base64中保存名称有什么意义?这是一个示例。我在过滤器中有overwrite方法您必须首先有一个setName()方法来对值进行编码:“选择*FROMtest
WHERE name='”$this->setName($name)。“”;但正如KingCrunch syas所说,“在base64中保存名称有什么意义?”但我可以在哪里编辑这些查询?SHA1不是加密。。。这是一个散列算法(也不是一个好算法),因此是不可逆的。OP的帖子清楚地表明(通过他的getName()方法的存在),他想要一种可逆编码,尽管他为什么要这样编码还不清楚,但我错了。两次:(谢谢。为什么这个标签是symfony和doctorine的?它与这两者都无关。因为我使用symfony和DOCTORIN。我想在过滤器symfony中使用NetBeans、Firefox和Windows7。我应该用它标记我的所有帖子吗?