1

正しいMVCコンセプトを使用したい。したがって、モデルで、たとえばDBへのクエリがあるとします。

    class my_model {

        public function getUserData () {
            $res = $this->db->query("
                SELECT name, lastname, age, mail FROM users
            ");

            return $res;
        }

    }

私が行うこと:mysqli_resultオブジェクトをビューに渡し、whileサイクルでビューを表示した後、DBからデータを出力します。

しかし、私が知っているように、パスmysqli_resultして表示するのは正しいMVCではありません。

では、このような状況で、正しいMVCソリューションとは何かを教えていただけますか?

4

3 に答える 3

1

MVCでは、ビューはモデルからのデータを直接要求し、何からもデータが渡されることはありません。ビューはモデルに依存しており、独自のデータを要求します。この回答を参照してください:これがなぜそうなのかについてのより詳細な説明については、CodeIgniterでMVCがどのように機能することになっていますか。

答えは、モデルの後にビューを初期化し、コンストラクターでモデル全体のビューを渡すことです。

例えば

class View {
    private $model;

    public function __construct(my_model $model) {
        $this->model = $model;
    }

    public function output() {
        $html = '<ul>';
        foreach ($this->model->getUserData() as $row) {
            $html .= '<li>' . $row->name . '</li>';
        }
        $html .= '</ul>';
        return $html;       
    }
}
于 2012-12-14T09:10:37.093 に答える
0

ユーザーのデータを保持するDTOクラスを実装する必要があると思います。次に、このDTOクラスをイテレーターで使用して、結果をフェッチするときに数百のDTOクラスを初期化しないようにする必要があります。モデルがこのリポジトリのみを呼び出すように、実際のDBクエリとイテレータの構築を行うサービスファサードを実装することもお勧めします。

于 2012-12-14T09:00:33.437 に答える
-1

私のMVCでは、次のようなことをします。

class my_model {
  public function getUserData () {
    $res = $this->db->query("
      SELECT name, lastname, age, mail FROM users
    ");

    while ($row = mysql_fetch_assoc($res)) {
      $results[] = $row;
    }
    return $results;
  }
}

class my_controller {
  function index() {
    $user_data = $my_model->getUserData();
    include("view.php");
  }
}



  // view.php
  echo "<ul>";
  foreach ($user_data as $d) {
      echo "<li>" . $d[keyname] . "</li>";
  }
  echo "</ul>";
于 2012-12-14T20:14:43.260 に答える