2 Stimmen

CakePHP 1.3 - $this->data -vs- $this->Model->data

In meinem Controller muss ich überprüfen, ob einige Eingabewerte sich von bestimmten Werten aus der Datenbanktabelle unterscheiden.
Beispiel:

Ein Eingabefeld mit einem Preiswert muss bei Aktualisierung niedriger sein als der aktuelle Preis. Deshalb mache ich folgendes:

$this->Model->read(null, $the_id);
//und dann:
if($this->data['Model']['price'] >= $this->Model->data['Model']['Price']) do_stuff();

Es funktioniert, aber ich befürchte, dass dies keine vertrauenswürdige Methode ist, da ich keine Dokumentation zu dieser Methode gefunden habe.

Wäre es richtig anzunehmen, dass $this->data immer die übermittelten Daten enthält und dass $this->Model->data immer die Ergebnisse eines read()-Aufrufs (oder jegliche Modell-Datenlesebezogene Inhalte) enthält?

2voto

Barry Chapman Punkte 6558

$this->data (im Controller) repräsentiert die vom Browser übermittelten Daten.

$this->Model->data repräsentiert die Daten, die in der Datenbank gespeichert sind (oder vom Controller im Modell festgelegt wurden).

Wenn du Folgendes tun würdest:

$this->Model->set($this->data);
$this->Model->save();

Dann ist das dasselbe wie:

$this->Model->save($this->data);

Wenn du Letzteres machst, werden die Daten in $this->Model->data gespeichert. Wenn du diese Daten in $this->Model->data über ein Verhalten oder einen anderen beforeSave()-Rückruf manipulieren würdest, würde es nicht im Array $this->data des Controllers repliziert. Also sei vorsichtig.

Also als Antwort auf deine Frage:

Wäre es richtig anzunehmen, dass $this->data immer die übermittelten Daten enthält?

Ja, das ist korrekt

und dass $this->Model->data immer die Ergebnisse eines read()-Aufrufs enthält (oder jeglichen im Modell gelesenen Dateninhalt)?

Ja - aber du kannst die Daten des Modells auch direkt in eine Variable speichern:

$data = $this->Model->read(null, $id);

Sei dir einfach bewusst, dass die beiden Datenarrays nicht verbunden sind, die Model->data werden nicht zum $this->data im Controller repliziert. Du müsstest das in deinem Controller manuell festlegen:

$this->data = $this->Model->data;

Hoffentlich hilft dir das weiter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X