Problem:
Sie können den Attributen des Modells im Yii-Framework keine Werte direkt zuweisen.
Schauen Sie sich zunächst den Quellcode an:
$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'); }
(Verwandte Artikel-Tutorials empfohlen: yii-Framework)
Das ist die Aktion Code einer Seite. Wenn Sie sich die Kommentare im Code ansehen, können Sie sehen, dass die POST-Zuweisung nicht akzeptiert wurde. Ich habe versucht, die Funktion setAttributes zu verwenden, und die Ausgabe ist immer noch der Wert des Originals Datenbank, kann aber mit updateByPk betrieben werden. Nachdem ich die setAttributes-Funktion verfolgt habe, habe ich festgestellt, dass die Funktionsdefinition wie folgt lautet:
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); } }
Bei der Analyse des setAttributes-Funktionscodes können wir sehen, dass beim Zuweisen von Werten Sicherheitsüberprüfungen durchgeführt werden zu Attributen, daher denke ich, dass der Grund darin liegen könnte, dass die Regeln des Modells nicht so eingestellt sind, dass sie für die in diesen Formularen geänderten Felder nicht sicher sind. Nachdem ich den Grund gefunden habe, liegt die Lösung einfach in den Regeln des Modells Setzen Sie das Attribut des Feldes, das Sie ändern möchten, auf „sicher“.
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... ); }
Weitere Inhalte zum Thema Programmierung finden Sie in der Spalte Einführung in die Programmierung auf der chinesischen PHP-Website!
Das obige ist der detaillierte Inhalt vonModellattributen in Yii konnten keine Werte zugewiesen werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!