2012-03-16 5 views
1

今日、私が作っているPHPプロジェクトで友人が私を助けています。彼は私のコードを見て、修正するいくつかのことを教えてくれました。彼が私がかなり理解していない1つのことがありました。彼は「あなたのコントローラをあなたの意見から外して、あなたのコントローラからあなたのモデルを取り出す」と言いました。"あなたのコントローラをあなたのビューから外してから、あなたのコントローラからあなたのモデルを得る"

$get_users = mysql_query("SELECT * FROM users") or die(mysql_error()); 

while($row = mysql_fetch_array($get_users)) { 
    $username = ucfirst($row['username']); 
    $user_group = getUserGroup($row['userlevel']); 
    $dor = $row['dor']; 

    print("<tr> 
       <td class='border-bottom'>$username</td> 
      <td class='border-bottom'>$user_group</td> 
      <td class='border-bottom'>$dor</td> 
      </tr>"); 
} 

誰かが、おそらく彼らはそのことについてmean't何を説明してもらえます。例えば、彼は私のウェブサイトのメンバーページである、ここで、このコードを指摘しましたか?もしあれば、いくつかのリソースを提供することもできますか?

+1

彼はMVCについて話しています... MVCの開発に気をつけなければ、そのコメントは完全に無視できます。誰かにあなたの「片方向」が正しい方法であるとあなたに伝えさせないでください。 – Fosco

+0

しかし、あなたの既存のコードはベストプラクティスとはまったく違うと一般に認められています。 – Kenaniah

答えて

3

彼はMVCと呼ばれるものを参照するか、モデル・ビュー・コントローラの。

コントローラクラスは要求を処理し、モデルは計算と計算(通常はデータベース接続と通信)を処理し、モデル(コントローラ)はモデルに収集された情報を含むビューをロードし、ユーザーに表示します。

彼があなたのロジックをディスプレイから分離する必要があるということです。


MVCは、より大きなアプリケーションに最適なデザインパターンです。しかし、あなたのアプリケーションが多くのページを持っていない、そして/または小さい場合、あなたはそれを必要としません。

+0

だから、すべてのメンバをロードするその時点で、私はクラスと呼ばれるクラスを持っているだろう.. dbhandlerとしましょう、私は$ db = new dbhandler();すべてのメンバーをロードして返す関数を作成しますか? $ db-> loadMembers(); –

+0

MVCベースのPHPフレームワークを読んで感じることをお勧めします。私はCodeIgniterを推奨します。彼らのドキュメントは非常に徹底して理解しやすいです。 –

+1

あなたはあなたのモデルであるUsersというクラスを持っていて、そこにはgetUsersという関数があります。だから '$ users-> getUsers()'。 'db'クラスは独立しており、db接続とSQLクエリの実行と結果の返却を扱うライブラリとしてより多く使われています。 –

-2
+0

リンクのみの回答を与えることはお勧めしません。あなたの答えをあなたの言葉で説明してください。 –

+0

これはほとんど答えではありません。誰かが書いた記事へのリンクを与えているだけです。あなたの友人はMVCのアイデアを参照していました。これはコードを特定のアクションを担当する「論理的な」セクションに分ける方法です。あなたは...などでもっと読むことができます – evasilchenko

+0

答えに間違ったリンクを与えている可能性があります。世界中の人々が寄稿した答えを説明するための適切なリンクを提供することは、「まれに答え」ではありません。 – battlemidget

1

私は「コントローラがモデルから外れています」とは同意しません。誰かがモデルオブジェクトにリクエストをマップする必要があります。あなたの友人は、層の純度を維持する唯一の目的のために平行したオブジェクト階層を作成する熱狂者の1人ではないことに注意してください。レイヤリングは良いです。ドグマはそうではありません。

+0

「モデルオブジェクトへのマップリクエスト」と、データアクセス、計算などのモデルコードを保持するという考え方にどう対処するかということについて少し明確にしてください。ビューとモデルの間の「接着剤」であることは? – evasilchenko

1

おそらく、このような何か:

コントローラファイル:

$users_info = get_user_details(); 
show_users_info($users_info); 

モデルファイル:

function get_user_details(){ 
    //... interacting with database 
    return $details; // an associative array for username, usergroup, dor 
} 

ビューファイル:

function show_users_info($data){ 
    for($i=0; $i<count($data); $i++){ 
     //your <table>, <tr>, <td> html here 
    } 
} 

あなたはモデルファイルがあることがわかります責任あるデータを作成するために使用されます。 であり、ビューファイルはデータの表示を担当します。SmartyやDwooなどのテンプレートエンジンを使用してそのデータを表示することができます。 そして、あなたがそれを学ぶために利用できる多くのPHP MVCフレームワークがあります。 CakePHP,CodeIgniter

アイデアは物を分けることです。データを準備するロジックは、データがhtmlとしてどのように表示されるかを妨げません。お互いに影響を与えることなく、それらのいずれかを変更することができます - あなたは1つのものを変更するときに他のものについて気にする必要はありません。

関連する問題