Syffony中的sfValidatorDoctrineUnique和sha1?

时间:2011-08-19 08:55:05

标签: php symfony1 doctrine symfony-1.4 sha1

User.class.php 中我有:

$this->setCode(sha1($this->getPassword()));

这没关系。在注册表格中,我想使用 sfValidatorDoctrineUnique

$this->validatorSchema->setPostValidator(new sfValidatorDoctrineUnique(array('model'=>'User', 'column'=>'code')));

但这不起作用。从没有sha1的表单和带有sha1的数据库中检查密码。我也使用sfValidatorDoctrineUnique作为电子邮件(没有sha1),这个工作正常。 我该如何解决?我使用Symfony 1.4.12

2 个答案:

答案 0 :(得分:1)

为什么你要检查密码是否唯一?这完全没有意义

UPD:要创建自己的验证器,请创建/lib/valdator/sfValidatorDoctrineFoobar.class.php

<?php

class sfValidatorDoctrineFoobar extends sfValidatorBase
{
  protected function configure($options = array(), $messages = array())
  {
    $this->addMessage('invalid_record', 'Unable to find the related record');
  }

  protected function doClean($value){
    $status = $this->getCodeStatus($value);
    if ($status == 1){
     throw new sfValidatorError($this, 'Code is invalid', array('value' => 'invalid code'));
    }

    if ($status == 2){
     throw new sfValidatorError($this, 'Code allready used', array('value' => 'used'));
    }

    return $value;
  }

  protected function getCodeStatus($value){
    $q = Doctrine_Query::create()->from('Code c');
    $q->select('c.hash, c.used');
    $q->addWhere('c.hash = ?', $value);

    $result = $q->fetchOne(array(), Doctrine::HYDRATE_ARRAY);

    if (!$result) return 1;
    if ($result['used'] == 1) return 2;
    return false;
  }
}

只是为了向您展示一个示例..您必须根据需要更改代码;)

答案 1 :(得分:0)

Symfony有一个用于哈希密码的内置选项我认为你应该使用它。你可以在这里阅读:sfGuardPlugin。如果我是你,我将sfDoctrineGuardPluginsfForkedDoctrineApplyPlugin一起使用。我正在使用它,它解决了所有这些问题。