0

CakePHP を使用してアプリケーションを作成していますが、generateMapUrl関数をどこに配置すればよいかわかりません。

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

私は次の構造を持っています:

予約 (モデル & コントローラー)
プロパティ (モデル & コントローラー)
アドレス (モデル & コントローラー)

予約hasOne物件と物件hasOne住所。generateMapUrlどのアドレスでも呼び出せるようにしたいです。メソッドをどこに配置すればよいかわかりません...アドレスコントローラー?アドレスモデル? (注: このメソッドは Bookings コントローラーから呼び出しています)

4

5 に答える 5

3

コントローラーには、セッション データがあります。モデルは、セッション状態を認識してはなりません。

于 2009-03-04T00:27:45.663 に答える
0

generateMapUrl()メソッドは、Addressデータのフェッチとフォーマットを処理するため、Addressモデルのメソッドである必要がありますが、falseを返し、セッション呼び出しを含まないようにする必要があります。

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

次に、任意のコントローラーからこれを呼び出して、そこでセッション呼び出しを使用できます。

function x() {
  if (!$mapUrl = ClassRegistry::init('Address')->generateMapUrl($addressId)) {
    $this->Session->setFlash('Invalid Property Id');
  }
}
于 2009-03-04T09:53:50.527 に答える
0

AddressMapUrlGenerator クラスを作成し、それを使用して URL を作成することを検討するかもしれません。Address を渡すことができます。そうすれば、URL やマップに関する心配でモデルを混乱させることがなくなり、同じ機能を複数のコントローラーに分散させることについて将来心配することもなくなります。

于 2009-03-04T00:36:29.103 に答える
0

モデルで GoogleAddress クラスを構築します。次に、コントローラで GoogleAddress を使用します。

于 2009-03-04T01:01:59.497 に答える
-1

少なくとも、次の 3 つのことが起こっています。

1) URL の作成 2) エラー処理 3) 明示的ではありませんが、実際の呼び出し。

URL の作成は、専用のヘルパー クラスによって処理される必要があります。コントローラーでチェックを実行するのが最善の可能性が高く、実際のチェック コードは別の場所に存在します。ユーザーがいる特定の場所に必要な特別なことを行う必要があるため、エラー処理はコントローラーで行う必要があります。最後に、呼び出し自体はもちろんコントローラーで行う必要があります。

于 2009-03-04T01:03:11.193 に答える