У меня есть временная модель как viewModel. В моих действиях CRUD (например actionCreate) я хочу получить данные viewModel и назначить их модели ActiveRecord. Я использовал ниже код, но мой атрибут объекта atrribute всегда показывает значение 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'], ... ]; }
Чтобы получить данные для отдельных атрибутов (db-fields) в yii2.0, вы должны просто сделать так:
echo $yourModel->getAttribute('email');
$attributes
ActiveRecord $attributes
являются частной собственностью. Используйте $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
а _User
$model->attributes = $post
будет работать правильно.
Я также столкнулся с той же проблемой, я добавлю свои атрибуты в функцию правил, но также и ошибку. И я нашел причину этой проблемы. Это связано с тем, что имя формы отправки в соответствующем файле представления не совпадает с именем модели, которое вы используете в контроллере
[controller file]: $model=new SearchForm(); [view file]: <input name="SearchForm[attribus]" ... or [view file]: <?= $form->field($model,'atrribus')->textInput()?>