Unterschied zwischen $Modell->Attribute und $model->setAttributes() in Yii
Immer wenn ich $model->attributes=$_POST['Users']
wird ,speichert es Daten aus User form.
Wenn ich $model->setAttributes($_POST['Users'])
,es speichert auch Daten von User form.
Also bitte kann das jemand klären, der Unterschied zwischen den beiden codes ?
- Ich kann nur raten, aber
setAttributes()
sollte auch laufen einige Validierungs-Regeln.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie gesagt in der Yii-wiki, die Sie verwenden können, eine dieser. Mit
$model->attributes
Sie die variable direkt. Mit$model->setAttributes()
Sie die variable, durch eine so genannte "Set-Methode".http://www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/#hh1
Würde ich die Set-Methode, anstatt direkt den Aufruf der variable, wie Sie können, fügen Sie eine Zeile in der setter-Methode, und es würde für alle seine Anrufe, und es würde sparen Sie eine Menge Kopfschmerzen in der Zukunft.
Beispiel:
So, jetzt, wenn Sie möchten, um eine zusätzliche operation auf das Attribut, fügen Sie es zu der
setAttributes()
Methode, und anstelle der änderung von zwei Zeilen code, Sie könnte sich ändern, nur eine.Beispiel:
Nun Hochskalieren um einen level, wenn es umständlich wäre zu ändern, Tausende Zeilen code, anstatt Sie zu verändern, ein paar Set-Methoden.
Mit
$this->setAttributes()
Sie zuordnen können, unsicheren Parametern, mit$this->attributes
Sie nicht.Zuweisung von unsicheren Parametern:
Mehr info: http://www.yiiframework.com/doc/api/1.1/CModel/#setAttributes-detail
Gibt es absolut keinen Unterschied.
Wenn Sie versuchen, zuweisen einer Eigenschaft, die nicht definiert ist, als eine PHP-Klasse Eigenschaft (wie
attributes
hier) auf eine Komponente, Yii durch die Konvention sieht dem ähnlich benannten setter-MethodesetAttributes
statt. Wenn keine solche Methode existiert, wird eine Ausnahme ausgelöst. Seit einer Yii-Modell ist eine Komponente und Modelle nicht über eineattributes
Eigenschaft, die setter-Methode aufgerufen wird, auch wenn Sie die erste form.All dies ist auch im detail erklärt in der Anleitung.
Nehmen wir ein Beispiel
$attributes
Eigenschaft.Gibt es keinen Unterschied. array_merge verwendet zum Zusammenführen von Parametern, wenn später