usr_firstname
という名前の属性にsetterメソッドsetUsr_firstname
を使用して、属性のデータ変換を実行しようとしています。Yii2:カスタム設定メソッド/データ変換がActiveRecordで機能しませんか?
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';
しかし、セッターメソッドが呼び出されることはありません!私はメソッドのすべての種類の名前を付けてみました - 例えば。 setUsrFirstname
- 何も動作しません。これをどのように機能させるには?
UPDATE
は、属性名にアンダースコアの有無にかかわらず、任意のActiveRecordの属性では動作しません考え出しました。
このように、メソッド 'public function setUsrFirstname($ value){$ this-> usr_firstname = fix_wrong_title_case($ value); } 'を呼び出して' $ model-> setUsrFirstname( 'John');のように呼び出すと動作しません。 – Bizley
@Bizleyいいえ、私はセッターメソッドを直接呼び出すのではありません - それはYiiのデータ変換のポイントです。 'usr_firstname'属性がシステムの任意の場所で変更されると、Yiiはsetterメソッド' setUsr_firstname'を自動的に呼び出し、それをモデル/オブジェクトに設定する前に値を実行します。 – TheStoryCoder
これは、直接宣言されたプロパティまたはアクティブレコード属性の場合(アンダースコア付きかどうかにかかわらず)には機能しません。 – Bizley