Php Yii框架,未定义user.password

Php Yii框架,未定义user.password,php,mysql,yii,Php,Mysql,Yii,当提交注册表格时,我一直得到的密码没有定义,我假设它会在表格的标题中定义,这是我的控制器的代码。总的来说,我想提取密码,对其进行哈希+加盐,然后将其与其余数据一起保存到mysql DB public function actionRegister() { $model = new Users; if (isset($_POST['Users'])) { $model->attributes = $_POST['Users']; $mode

当提交注册表格时,我一直得到的密码没有定义,我假设它会在表格的标题中定义,这是我的控制器的代码。总的来说,我想提取密码,对其进行哈希+加盐,然后将其与其余数据一起保存到mysql DB

public function actionRegister() {
    $model = new Users;

    if (isset($_POST['Users'])) {

        $model->attributes = $_POST['Users'];
        $model->password-> beforeSave($model['password']);

        if($model->save()){
            Yii::app()->user->setFlash('register', 'Thank you for registering');
            $this->refresh();                                                      
        }
    }

    $this->render('register', array('model' => $model));
}

public function beforeSave() {
    if (!empty($this->password))
        $this->crypted_password = sha512($this->password);
    return true;
}
下面是视图中的代码

<?php
/* @var $this UsersController */
/* @var $model Users */
 ?>

<h1>Register</h1>

 <?php $this->renderPartial('_form', array('model' => $model)); ?>
<?php if (Yii::app()->user->hasFlash('register')): ?>

<div class="flash-success">
    <?php echo Yii::app()->user->getFlash('register'); ?>
</div>

登记

如果您有任何帮助,我们将不胜感激。首先,启用yii调试并确保您设置了
错误报告(-1)
ini\u集('display\u errors',1)
在初始化脚本中

接下来,密码应该是模型类中的一个属性,例如数据库表字段或模型中的公共属性。您的加密密码属性也是如此

话虽如此,在您的控制器中,您正在调用
$model->password->beforeSave($model['password'))
,这没有任何意义,除非密码是附加到用户模型的行为,我对此表示怀疑

撇开这一点不谈,您的控制器很可能看起来像:

public function actionRegister() {
    $model = new Users;
    if (isset($_POST['Users'])) {
        $model->attributes = $_POST['Users'];
        if($model->save()){
            Yii::app()->user->setFlash('register', 'Thank you for registering');
            $this->refresh();                                                      
        }
    }
    $this->render('register', array('model' => $model));
}
在您的模型中,您可以简单地重写Activerecord的parent::beforeSave()方法,如:

    protected function beforeSave() {
       if (!empty($this->password)) {
          $this->crypted_password = sha512($this->password);
       }   
       return parent::beforeSave();
    }
还要确保您的模型属性具有适当的规则,以便可以通过
$model->attributes=…
方式分配它们


差不多就是这样。

UPDATE我已经解决了这个错误,现在只接收到对非对象beforeSave()的成员函数beforeSave()的调用(是的,这正是我在回答中写的;)尝试$model->beforeSave()@sany2k8-不,永远不要尝试
$model->beforeSave()
。我们的控制器与@twisted1919完全相同,添加到我的模型中,仍然在非对象上调用成员函数beforeSave()in@arenthor-由于您的控制器调用,您在其中调用
$model->password->\u beforeSave()
这不仅是错误的,而且密码是字符串而不是对象!整个过程是稳定的,但不是散列的:/确保密码和加密密码是模型规则的一部分,您可以添加如下规则:
array('password,cryped\u password','safe')
,以确保它们是批量分配的,正如我前面所说:)添加了现在没有定义CStringValidator