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)

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top