web-dev-qa-db-fra.com

modèle-> attributs dans Yii2 a toujours la valeur NULL

J'ai un modèle temporaire comme viewModel. Dans mes actions CRUD (par exemple, actionCreate), je souhaite obtenir ces données viewModel et les affecter à un modèle ActiveRecord. J'ai utilisé le code ci-dessous, mais mon objet modèle atrribute affiche toujours la valeur NULL pour les attributs:

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

Je pense que $ model-> load (Yii :: $ app-> request-> post ()) ne fonctionne pas et que l'attribut object est NULL. Est-ce un bug Yii2 ou mon code est incorrect ??

13
b24

S'il n'y a pas de règle pour votre attribut, la$model->load()ignorera celles qui ne figurent pas dans les règles du modèle.

Ajoutez vos attributs à la fonction de règles

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

Pour récupérer des données pour un attribut individuel (champs de base de données) dans yii2.0, procédez comme suit: 

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

ActiveRecord $attributes est une propriété privée Utilisez $model->getAttribute(string)

1
Alex

Vous pouvez utiliser les codes suivants: 

$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

Vous devez supprimer toutes les propriétés publiques ( title, type , etc.) dans votre modèle _User et $model->attributes = $post fonctionneront correctement.

0
Alexander

J'ai également rencontré le même problème, j'ajoute mes attributs à la fonction de règles, mais aussi à une erreur. Et j'ai trouvé la raison de ce problème. Il est possible que le nom du formulaire de soumission dans le fichier de vue correspondant ne soit pas identique au nom du modèle que vous utilisez dans le contrôleur

[controller file]:

$model=new SearchForm();

[view file]:

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

or 

[view file]:

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