問題:
Yii フレームワークではモデル属性に値を直接割り当てることができません。
最初にソース コードを見てください:
$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'); }
(関連記事チュートリアルをお勧めします: yii Framework)
これがアクションですページのコード, コード内のコメントを見ると、発生したエラーがわかります。POST 割り当てが受け入れられません。setAttributes 関数を使用してみましたが、これも受け入れられませんでした。出力は元の値のままです。 setAttributes 関数を追跡した結果、関数の定義は次のとおりであることがわかりました:
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); } }
setAttributes 関数のコードを分析すると、値を割り当てるときにセキュリティ チェックが実行されることがわかります。モデルのルールが、それらのフォームで変更されたフィールドに対して安全に設定されていないことが原因であると考えられます。理由を見つけた後、解決策が見えてきます。モデルのルールでは、単に変更するフィールドの属性を安全に設定します。
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... ); }
さらにプログラミング関連のコンテンツについては、php 中国語 Web サイトの プログラミング入門 列に注目してください。
以上がYii でモデル属性に値を割り当てることができませんでしたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。