Php Yii框架,未定义user.password
当提交注册表格时,我一直得到的密码没有定义,我假设它会在表格的标题中定义,这是我的控制器的代码。总的来说,我想提取密码,对其进行哈希+加盐,然后将其与其余数据一起保存到mysql DBPhp 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
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