sta*_*e76 3 php mysql activerecord yii
在Yii ActiveRecord中,是否可以在模型构造函数中设置属性并且仍然使模型的isNewRecord属性保持为真?
我有一个模型构造函数来创建一个私有属性来保存PHPPass密码哈希实例.当我这样做时,它将isNewRecord属性设置为false,即使该记录是新建的.
如果id属性大于零,我尝试在构造函数中调用setIsNewRecord(true),但是看起来属性在构造函数中不可用.
我不得不删除构造函数,并在每个需要phpass的方法中生成语句.
用户模型的构造函数:
public function __construct(){
$this->phpass=new PasswordHash(Yii::app()->params['phpass']['iteration_count_log2'], Yii::app()->params['phpass']['portable_hashes']);
}
Run Code Online (Sandbox Code Playgroud)
控制器中的用户模型init和isNewRecord条件
public function actionEdit($id = null)
{
$myModel = new User();
echo $myModel->isNewRecord; //false due to constructor
}
Run Code Online (Sandbox Code Playgroud)
小智 5
当ovveriding contstructor 确保调用父构造函数时.除非你知道自己在做什么,否则总是在ovveriding时调用父构造函数.
public function __construct($scenario = 'insert'){
parent::__construct($scenario);
$this->phpass=new PasswordHash(Yii::app()->params['phpass']['iteration_count_log2'], Yii::app()->params['phpass']['portable_hashes']);
}
Run Code Online (Sandbox Code Playgroud)
phpass也可以存储为静态属性,每个活动记录实例不需要新的phpass实例.
编辑:感谢@Kevin链接至怀疑约ovverding构造函数.
要添加的另一个重要注意事项:请记住将参数传递给构造函数.在Yii模型类中,存在$scenario具有默认值的参数insert.当你在没有传递这个参数的情况下ovveride构造函数时,总会有一个insert场景,并且不会有任何关于缺失param的错误消息,因为它有默认值.我更新了代码$scenario.
| 归档时间: |
|
| 查看次数: |
2473 次 |
| 最近记录: |