ViewModelとして1つの一時モデルがあります。 CRUDアクション(たとえば、actionCreate)で、このviewModelデータを取得して、ActiveRecordモデルに割り当てます。以下のコードを使用しましたが、モデルオブジェクトの属性には常に属性のNULL値が表示されます。
$model = new _Users();
if ($model->load(Yii::$app->request->post())) {
Yii::info($model->attributes,'test'); // NULL
$attributesValue =[
'title' => $_POST['_Users']['title'],
'type' => $_POST['_Users']['type'],
];
$model->attributes = $attributesValue;
Yii::info($model->attributes,'test'); // NULL
$dbModel = new Users();
$dbModel->title = $model->title;
$dbModel->type = $model->type . ' CYC'; // CYC is static type code
Yii::info($dbModel->attributes,'test'); // NULL
if ($dbModel->save()) {
return $this->redirect(['view', 'id' => $dbModel->id]); // Page redirect to blank page
}
}
else {
return $this->render('create', [
'model' => $model,
]);
}
$ model-> load(Yii :: $ app-> request-> post())機能せず、オブジェクト属性がNULLだと思います。 Yii2バグですか、それともコードが間違っていますか?
属性にルールがない場合、$model->load()
はモデルのルールにないルールを無視します。
ルール関数に属性を追加します
public function rules()
{
return [
...
[['attribute_name'], 'type'],
...
];
}
Yii2.0で個別の属性(db-fields)のデータをフェッチするには、次のようにします。
echo $yourModel->getAttribute('email');
ActiveRecord _$attributes
_はプライベートプロパティですUse $model->getAttribute(string)
次のコードを使用できます。
$model = new _Users();
$model->attributes=Yii::$app->request->post('_Users');
$model->title= $model->title
$model->type = $model->type . ' CYC'; // CYC is static type code
#$model->sampleAttribute='Hello World';
_User
モデルのすべてのパブリックプロパティ(title、typeなど)を削除する必要があります。これにより、$model->attributes = $post
が正しく機能します。
同じ問題が発生しました。ルール関数に属性を追加しましたが、エラーも発生しました。そして、私はこの問題の理由を見つけました。対応するビューファイル内の送信フォームの名前が、コントローラーで使用するモデルの名前と同じではないためです
[controller file]:
$model=new SearchForm();
[view file]:
<input name="SearchForm[attribus]" ...
or
[view file]:
<?= $form->field($model,'atrribus')->textInput()?>