0

我有简单的类:

User:
  id | login | password | desc

并以此形成。

我该怎么做 - 如果输入密码为空(strlen == 0),那么在模型中并不重要。

现在我在 User.class.php 中保存了函数:

$this->setPassword(sha512($this->getPassword));
4

1 回答 1

1

您必须确保在 DB 级别上没有“NOT NULL”,因此 ORM 通常会忽略空值。

通过自定义函数更改给定密码有 2 种可能性,因此我将给您一些简单的示例。

1)在你的模型文件中(我猜你有教义或推进?!):

 /**
 * via object's event handler
 */
 preSave(){
    if(strlen($this->getPassword()) > 0){
        $this->setPassword(sha512($this->getPassword()));
    }
 }

2)甚至作为表单验证器:

/**
 * custom validator
 */
class myValidatorOldPassword extends sfValidatorBase{

    /**
     * Clean and validate user input
     *
     * @param mixed $value Value of form input
     * @return mixed Value 
     */
     protected function doClean($value)
     {
        // trim is not needed
        $clean = (string) $value;

        // password is ok?
        if (strlen($clean) > 0)
        {
            return sha512($clean);
        }

        // Throw error - if you want
        // throw new sfValidatorError($this, 'invalid', array('value' => $value)); 

        // or return empty value
        return $clean;
    }

}

当然,此代码可能会有所改进,因为它只是对您的提示。

于 2012-05-13T09:57:13.790 回答