Nerede CakePHP odaklı sitesinde bu yöntemi koymak gerekir?

5 Cevap php

Ben CakePHP kullanarak bir uygulama yazıyorum ve benim generateMapUrl fonksiyonunu koyarak nereye olarak emin değilim.

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;
}

I, aşağıdaki yapıya sahiptir:

Booking (Model & Controller)
Properties (Model & Controller)
Address (Model & Controller)

Bir Kitap hasOne Gayrimenkul ve Emlak hasOne Adres. Ben herhangi bir Adres için generateMapUrl arama yapabilmek istiyorum. Ben olsa ... Adres denetleyicisi yöntemi koymak nereye kadar emin değilim? Model Adres? (Not: Ben Sarı kumandadan bu yöntemi arıyorum)

5 Cevap

GenerateMapUrl () yöntemi getiriliyor ve biçimlendirme Adres veri ile ilgili olarak Adres model bir yöntem olmalıdır, ama return false ve oturum çağrıları içermemelidir:

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;
}

Daha sonra herhangi bir denetçi bu çağrı ve orada oturum aramaları kullanabilirsiniz:

function x() {
  if (!$mapUrl = ClassRegistry::init('Address')->generateMapUrl($addressId)) {
    $this->Session->setFlash('Invalid Property Id');
  }
}

Kontrolör, bu oturum veri var. Modeli herhangi bir oturum devletlerin farkında olmamalıdır.

Ben bir AddressMapUrlGenerator sınıf oluşturma ve URL oluşturmak için kullanmayı düşünebilirsiniz. Sen ona bir Adres geçebileceği. Bu şekilde, URL'ler veya haritaların ilgili endişeler Model sersemleyici olmayacak ve birden fazla Controller yayılmış aynı işleve sahip hakkında gelecek endişeleri olmaz.

Modelde bir GoogleAddress Sınıf oluşturmak. Sonra denetleyicisi GoogleAddress kullanın.

En azından, oluyor üç şey vardır:

1) Creation of the URL 2) Error handling 3) And though not explicit, the actual call.

URL oluşturulması özel bir yardımcı sınıf tarafından ele alınmalıdır. Bu kontrol denetleyicisi yürütülen olması en muhtemel olan, asıl kontrol kodu başka bir yerde ikamet ediyorum. Hata işleme bu kullanıcı altındadır belirli bir yer için gerekli özel bir şey yapmak zorunda gibi, denetleyici olmalıdır. Son olarak, çağrının kendisi, tabii denetleyicisi yer almalıdır.