Wo soll ich diese Methode in CakePHP-driven Website setzen?
Frage
Ich schreibe eine Anwendung mit CakePHP und ich bin nicht sicher, wo ich meine generateMapUrl
Funktion werden setzen.
function generateMapUrl($id = null) {
if ( !$id ) {
$this->Session->setFlash('Invalid Property Id');
}
$this->read(null, $id);
$url = "http://maps.google.com/maps?oi=map&q=";
$url .= $this->data['street_num'] . '+';
$url .= $this->data['street'] . '+';
$url .= $this->data['city'] . '+';
$url .= $this->data['province'] . '+';
$url .= $this->data['country'] . '+';
$url .= $this->data['postal_code'];
return $url;
}
Ich habe die folgende Struktur:
Booking (Model & Controller)
Eigenschaften (Modell & Controller)
Adresse (Modell & Controller)
Eine Buchung hasOne
Eigentum und Immobilien hasOne
Adresse. Ich möchte in der Lage sein generateMapUrl
für jede Adresse zu nennen. Ich bin nicht sicher, wo allerdings die Methode zu setzen ... Adresse Controller? Adresse Modell? (Anmerkung: Ich rufe diese Methode aus den Karten-Controller)
Lösung
Der generateMapUrl () -Methode ein Verfahren in Ihrem Adressbuch Modell sein sollte, wie es mit Abrufen und Formatierung Adressdaten zu tun hat, soll aber falsch zurückgeben und nicht die Sitzungsaufrufe enthält:
function generateMapUrl($id = null) {
$this->recursive = -1;
if (!$this->read(null, $id)) {
return false;
}
$url = "http://maps.google.com/maps?oi=map&q=";
$url .= $this->data['street_num'] . '+';
$url .= $this->data['street'] . '+';
$url .= $this->data['city'] . '+';
$url .= $this->data['province'] . '+';
$url .= $this->data['country'] . '+';
$url .= $this->data['postal_code'];
return $url;
}
Sie können diese dann rufen Sie von jedem Controller und verwenden Sie die Sitzung Anrufe gibt:
function x() {
if (!$mapUrl = ClassRegistry::init('Address')->generateMapUrl($addressId)) {
$this->Session->setFlash('Invalid Property Id');
}
}
Andere Tipps
In dem Controller hat es Sitzungsdaten. Das Modell sollte nicht bekannt werden von Sitzungszustände.
Ich könnte eine AddressMapUrlGenerator Klasse betrachten das Erstellen und Verwenden sie die URL zu erstellen. Man könnte es sich um eine Adresse übergeben. Auf diese Weise werden Sie nicht das Modell mit Sorgen über URLs oder Karten werden muddling, und Sie müssen nicht Zukunft Sorgen um die gleiche Funktion in mehr als ein Controller ausgebreitet hat.
Im Modell eine GoogleAddress Klasse bauen. Dann nutzen Sie die GoogleAddress in der Steuerung.
Am allerwenigsten gibt es drei Dinge geschehen:
1) Erstellung der URL 2) Fehlerbehandlung 3) Und wenn auch nicht explizit, der tatsächliche Anruf.
Die Schaffung der URL sollte von einer engagierten Helfer Klasse behandelt werden. Es ist wahrscheinlich am besten, die Kontrolle zu haben, auf dem Controller ausgeführt wird, der tatsächliche Überprüfung Code würde woanders wohnen. Die Fehlerbehandlung sollte auf dem Controller sein, da es etwas Besonderes, die für den bestimmten Ort tun, müßte der Benutzer an. Schließlich sich der Ruf, sollte natürlich stattfinden, auf dem Controller.