2

私はPHPでOOPを初めて使用し、それを使用してサイトを作成しようとしています。このサイトは基本的なフラッシュ ゲーム サイトで、ゲームを追跡するためのカテゴリがあります。私の最初のステップは、基本的な MVC セットアップを作成し、すべてのカテゴリを一覧表示することでした。問題は、すべてのカテゴリを含む配列を作成する方法がわからないことです。これをコントローラーに追加できますか?モデルに新しいメソッドを追加する必要がありますか? 教えてください、コードは以下です。

index.php (コントローラー)

<?php
    require_once 'database.php';
    require_once 'models/category.php';

    if (isset($_GET['page']))
    {
    }
    else
    { //display home page
        require_once 'views/home.php';
    }
?>

models/category.php (モデル)

<?php
    class Category
    {
        private $id,$name;

        function __construct($id)
        {
            $category_query = $database_connection->prepare('SELECT id,name FROM categories WHERE id=?');
            $category_query->execute(array($id));
            $category = $category_query->fetch();

            $this->id = $category['id'];
            $this->name = $category['name'];
        }

        function get_id()
        {
            return $this->id;
        }

        function get_name()
        {
            return $this->name;
        }
    }
?>

views/home.php (ビュー)

List of all categories:
<ul>
<?php foreach ($all_categories as $category) { ?>
    <li><?php echo $category->get_name(); ?> (ID: <?php echo $category->get_id(); ?>)</li>
<?php } ?>
</ul>
4

2 に答える 2

2

簡単に言えば、すべてをまとめる接着剤が不足しているだけです。これは、「ビジネス ロジック」と呼ばれることがよくあります。現在「モデル」として持っているものは、実際にはデータ ストレージ レイヤーです。モデルはこれを使用して、ビューに与える必要があるものをコントローラーに返す必要があります。

コードの下には、いくつかの選択肢があります。1 つは、ビューが使用する配列を組み立てる必要があるデータ クラスをコントローラーが使用することです。これは、他のコントローラーがそれを行う必要がない場合に最適です。別の解決策は、それを行うためのモデル コードを追加することです。これにより、他のコントローラーが同じモデルを呼び出して同じデータを取得できるようになりますが、同じ手順を必要とする他のクラスがある場合は、コードを繰り返すことになります。3 番目の解決策は、データ モデルを拡張してコレクション ビューを提供することです。次に、モデル コードは、コントローラーが必要とするコレクションの種類とデータ モデルにそれを要求する間の単純な変換レイヤーになります。コントローラーに残すだけの簡単な場合もあります。

于 2008-12-03T05:04:52.887 に答える
1

Staticsan が言ったように、それを置くことができる場所はたくさんあり、それについて書かれた本もあります。コンストラクターを変更して、引数を指定しない場合はクエリを実行しないようにします。次に、すべてのカテゴリ (または一部のサブセット) の独自のクエリを実行する静的メソッドを使用し、Category オブジェクトの配列を組み立てて返します...

おそらく、これらのオブジェクトを作成して返すだけの責任を持つ CategoryFactory というクラスを作成することをお勧めします。そこから (または静的メソッド ファクトリから)、クエリを 1 つだけ実行していることを確認できます。

MVC は Web アプリケーション アーキテクチャのすべてではありません。

于 2008-12-03T05:15:20.557 に答える