Problème :
Vous ne pouvez pas attribuer directement des valeurs aux attributs du modèle dans le framework Yii.
Jetez d'abord un œil au code source :
$menuId = isset($_GET['mId']) ? $_GET['mId'] : 0; if ($menuId) { $menu = MenuTree::model()->findByPk($menuId); if(isset($_POST['MenuTree'])){ var_dump($menu->attributes); //在这里跟踪输出的数据正常,跟表单中填写的一致 $menu->attributes = $_POST['MenuTree']; //对attributes进行赋值 var_dump($menu->attributes); //输出$menu模型中的attributes,不正常,结果并不是POST接收到的值,而是数据库原有的值 if($menu->save()){ Yii::app()->user->setFlash('success',"恭喜您,修改成功,请继续!"); $this->redirect(Yii::app()->createUrl('menu/contentEdit',array('mId'=>$menuId))); }else{ throw new CException("修改失败!"); } } $this->render("contentEdit", array('menu' => $menu)); } else { throw new CHttpException('404'); }
(Tutoriels d'articles connexes recommandés : framework yii)
Voici l'action code d'une page, en regardant les commentaires dans le code, vous pouvez voir l'erreur qui s'est produite. L'affectation POST n'est pas acceptée. J'ai essayé d'utiliser la fonction setAttributes et elle n'a pas non plus été acceptée. La sortie est toujours la valeur d'origine. base de données, mais elle peut être utilisée avec updateByPk. Après avoir suivi la fonction setAttributes, j'ai trouvé que la définition de la fonction est la suivante :
public function setAttributes($values,$safeOnly=true) { if(!is_array($values)) return; $attributes=array_flip($safeOnly ? $this->getSafeAttributeNames() : $this->attributeNames()); foreach($values as $name=>$value) { if(isset($attributes[$name])) $this->$name=$value; else if($safeOnly) $this->onUnsafeAttribute($name,$value); } }
En analysant le code de la fonction setAttributes, nous pouvons voir que des contrôles de sécurité sont effectués lors de l'attribution de valeurs. aux attributs, donc je pense que la raison peut être que les règles du modèle ne sont pas définies pour être sûres pour les champs modifiés dans ces formulaires. Après avoir trouvé la raison, la solution apparaît simplement dans les règles du modèle. définissez l'attribut du champ que vous souhaitez modifier sur safe.
public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( // more code... array('field1 , field2 ,field3', 'safe'), //Modify the fields in here // more code... ); }
Pour plus de contenu lié à la programmation, veuillez faire attention à la colonne Introduction à la programmation sur le site Web PHP chinois !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!