2011-02-14 6 views
0

J'ai créé une page de profil de mise à jour.Yii mise à jour page de profil

Je possède ce dans le contrôleur pour remplir le formulaire et poignée également mise à jour:

cependant
$user = User::model()->findByPk(Yii::app()->user->id); 
// Collect user input 
if (isset($_POST['User'])) { 
$user->attributes = $_POST['User']; 

if ($user->save()) { 
    echo "update successfully"; 
} 
else { 
    echo "update failed"; 
} 
} 

// View 
$this->render('user_view', array('user'=>$user,)); 

cela ne fonctionne pas. Bien que $ user-> save soit true, l'enregistrement n'est pas mis à jour dans la base de données. J'ai également vérifié que $ _POST ['User'] retourne les données mises à jour mais $ user-> attributes ne les enregistre pas.

pourquoi est-ce ainsi?

+0

Je peux assigner manuellement en utilisant $ user-> name = $ _POST ['User'] ['name']; mais cela serait gênant s'il y a une liste de données à mettre à jour – nuttynibbles

+0

vérifier la réponse de thaddeusmt, ce serait génial si vous pouviez également poster votre modèle «utilisateur»: D – ZaQ

Répondre

4

Vous devez définir quels attributs de modèle sont "sûrs" pour les "affectations massives". En savoir plus sur ce here.

L'affectation d'attribut de masse $user->attributes affectera uniquement aux variables avec des règles de validation. Attribuez simplement une règle à l'attribut name, même s'il s'agit uniquement du "safe" validator. Je suis assez sûr que c'est le problème que vous rencontrez, c'est arrivé à moi!

+0

Très probablement c'est effectivement le problème, je me suis heurté moi-même déjà un tas de fois :) – Blizz

Questions connexes