我正在尝试使用setter方法setUsr_firstname
对名为的属性进行属性转换usr_firstname
。
class User extends ActiveRecord implements IdentityInterface {
public function rules() {
return [
[['usr_firstname', 'usr_lastname', ... ], 'required'],
...
];
}
...
public function setUsr_firstname($value) {
$this->usr_firstname = fix_wrong_title_case($value);
}
}
然后,我执行以下操作:
$model = new User(['scenario' => User::SCENARIO_REGISTER]);
$model->usr_firstname = 'John';
但是永远不会调用setter方法!我尝试命名该方法的所有事情-例如。setUsrFirstname
-但是没有用。我该如何工作?
更新
找出它不适用于任何ActiveRecord属性,属性名称中是否带有下划线。
如果直接声明属性或Active Record属性(无论是否带有下划线),则不会调用Setter方法。
Active Record的魔术__set
方法直接将值分配给映射的属性。
您可以使用新的虚拟属性实现类似的功能:
public function setUsrFirstname($value)
{
$this->usr_firstname = doSomethingWith($value);
}
public function getUsrFirstname()
{
return $this->usr_firstname;
}
因此,现在您可以像这样使用它:
$this->usrFirstname = 'John';
echo $this->usrFirstname;
如果要在AR的生命周期中修改属性,则可以:
afterFind()
方法以在数据库获取后对其进行更改,beforeSave()
在保存到数据库之前,请覆盖模型的方法进行更改,validate()
和clearErrors()
)。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句