Yii2:自定义设置方法/数据转换在ActiveRecord上不起作用?

TheStoryCoder

我正在尝试使用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的生命周期中修改属性,则可以:

  • 在验证过程中使用FilterValidator对其进行更改,
  • 覆盖模型的afterFind()方法以在数据库获取后对其进行更改,
  • beforeSave()在保存到数据库之前,请覆盖模型的方法进行更改,
  • 准备可以做以上所有事情的行为,
  • 准备直接调用将更改它的方法(您可以为此使用第一个setter方法;无需调用validate()clearErrors())。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

yii2自定义验证不起作用

Yii2模型自定义验证方法/功能不起作用

自定义验证在yii2中不起作用

Yii2 中 DynamicFormWidget 的自定义验证不起作用

控制器中的自定义操作在yii2中不起作用

自定义验证消息在Yii2中不起作用

YII2在模糊Ajax验证上不起作用

自定义“套用刷新”在iOS上不起作用

自定义字体在移动设备上不起作用

为什么排序方法在此自定义AbstractList实现上不起作用?

Yii,自定义过滤器不起作用

Yii cgridview从数据不起作用向按钮添加自定义html属性

UITableView自定义单元在iPad Storyboard上不起作用,但在iPhone上起作用

按钮单击功能在数据表工具栏自定义按钮上不起作用

Yii2 设置自定义会话

具有设置数据的Firestore自定义文档ID不起作用-CollectionReference

设置后退按钮自定义外观不起作用

DataBinding Android,自定义设置器,不起作用?

显示自定义数据不起作用反应js

yii2前端和后端在共享服务器上不起作用

如果设置了自定义会话路径,重定向后,Yii Flash消息将不起作用

为什么“内容安全策略”的自定义标头在 github 上不起作用?

自定义Google Maps样式在iPad上不起作用

text-align:center在自定义元素上不起作用

链接在 Facebook 页面自定义选项卡上不起作用

Java自定义光标在新计算机上不起作用

ng-class在使用templateURL的自定义指令上不起作用

自定义Cursor CSS在网页的某些部分上不起作用

在后台模式下,FCM自定义声音在iOS上不起作用