0

MVCパターンで理解できない点が1つあります。理解してください。

たとえば、データベースに自動車のテーブルがあり、テーブルから結果を取得して印刷したいのですが、結果が見つからない場合(0行)、この場合は「結果がありません」と出力します。

これはmodels.php

class modesl {

function getCars () {

    $res = $this->db->query("SELECT names FROM cars");
    if ($res->num_rows == 0) {
        return "We dont have results";
    }
    else {
        return $res;
    }

}

}

これはviews.php

class views {

    function loadHTML ($resultFromCars) {
         require 'carspage.php';
    }

}

これはcarspage.php

<html>
<body>
<?php

    if (is_object($resultFromCars)) {
        while ($row = $resultFromCars->fetch_assoc()) {
            echo $row['names']."<br>";
        }
    }
    else {
        echo  $resultFromCars;
    }

?>
</body>
</html>

これはcontrollers.php

class controllers {

    function generatePage () {  
        $model = new models();
        $resultFromCars = $model->getCars();


        $view = new views();
        $view->loadHTML($resultFromCars);
    }

}

これは機能しますが、私が知っているように、ビューにある多くのphpコード(つまり条件if (is_object) { } else { })は正しいMVCではありません。この具体的なケースについて教えてください、正しいMVCコンセプトを取得するには、私のアーキテクチャで何を変更する必要がありますか(笑)?

4

2 に答える 2

2

私はHavelockによって提供された答えが好きです。

モデルがすでに配列形式でデータを返すことを確認することで、これをさらに調整します(または、何も見つからない場合はfalse)。したがって、結果セットからデータを抽出するためのロジックは、実際にあるはずのモデルに残ります。

その場合、ビューはさらに単純になります。

<?php

if (!empty($results)) {
  foreach ($results as $row) {
   echo $row['name'] . "<br />";
  }
} else {
    echo "Eh, Nothing found...";
}
于 2012-10-13T14:04:32.090 に答える
1

あなたは良い仕事をしたようですが、改善すべき小さなことが1つだけあります。モデルはデータのみのラッパーであるため、データのみを返す必要があります(エラー/例外メッセージを含む文字列は返しません)。FALSEPHPで行われているように、 返すデータがない場合は、を返します。

class CarModel {

    function getCars () {

        $res = $this->db->query("SELECT names FROM cars");
        if ($res->num_rows == 0) {
            return FALSE; // if that happens, the function will stop execution here, so no "else" is needed
        }

        return $res;

    }

}

そしてあなたの見解では

<?php

    if ($resultFromCars === FALSE && !empty($resultFromCars)) {
        echo "We don't have results";
    }
    else { // now you know it's not FALSE, so it must be an object, no need to check whether it is one
        while ($row = $resultFromCars->fetch_assoc()) {
            echo $row['names']."<br>";
        }
    }

?>
于 2012-10-13T13:52:52.147 に答える