it-swarm.com.de

model-> Attribute in Yii2 haben immer einen NULL-Wert

Ich habe ein temporäres Modell als ViewModel. In meinen CRUD-Aktionen (zum Beispiel actionCreate) möchte ich diese viewModel-Daten abrufen und einem ActiveRecord-Modell zuweisen. Ich habe den folgenden Code verwendet, aber mein Modellobjektattribut zeigt immer einen NULL-Wert für Attribute an:

$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,
        ]);
}

Ich denke $ model-> load (Yii :: $ app-> request-> post ()) funktioniert nicht und das Objektattribut ist NULL. Ist es ein Yii2-Fehler oder ist mein Code falsch?

13
b24

Wenn für Ihr Attribut keine Regel vorhanden ist, ignoriert die$model->load()die nicht in den Regeln des Modells enthaltenen Regeln.

Fügen Sie der Regelfunktion Ihre Attribute hinzu

public function rules()
{
    return [
        ...
        [['attribute_name'], 'type'],
        ...
    ];
}
20
Jason G

Um Daten für ein einzelnes Attribut (db-Felder) in yii2.0 abzurufen, sollten Sie Folgendes tun: 

echo $yourModel->getAttribute('email');
3

ActiveRecord $attributes ist eine private Eigenschaft Verwendung $model->getAttribute(string)

1
Alex

Sie können folgende Codes verwenden: 

$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';
1
Mahmut Aydın

Sie müssen alle öffentlichen Eigenschaften ( title, type usw.) in Ihrem _User-Modell entfernen, und $model->attributes = $post wird ordnungsgemäß funktionieren.

0
Alexander

Ich habe auch das gleiche Problem angetroffen. Ich füge der Regelfunktion meine Attribute hinzu, aber auch Fehler. Und ich habe den Grund für dieses Problem gefunden. Der Name des übergebenen Formulars in der entsprechenden Ansichtsdatei stimmt jedoch nicht mit dem Namen des Modells überein, das Sie in der Steuerung verwenden

[controller file]:

$model=new SearchForm();

[view file]:

<input name="SearchForm[attribus]" ...

or 

[view file]:

<?= $form->field($model,'atrribus')->textInput()?>
0
soc