2011-07-06 7 views
1

私は多くを読んでいて、本当に混在した結果を得ています。このコードはどこでMVC構造体に存在しますか?

私はこのようなコードがありますか?

$name = trim($_POST['name']); 
$email = trim($_POST['email']); 

if(strlen($name) > 0 & strlen($email) > 0) 
{ 
    $u = new User(); 
    $u.name = $name; 
    $u.email = $email; 
    $u.validate(); 
} 

このコードはどこにありますか?実際にフォームをチェックして実際の値があることを確認するコードですか?私はModelと言っていますが、フォームが複数のモデルにまたがっている場合はどうなりますか?

私はちょっと混乱しています。それを解決する助けがあれば幸いです。

+0

参照:モデルとhttp://stackoverflow.com/questions/6524037/designing-service-layer-classes-in-php –

答えて

3

次に、modelはトリムや検証などの処理を行います。

モデルにビジネスロジックが含まれていると+1します。

1

モデルは、ビジネスロジックが含まれているので、あなたが(例えば、電子メール、名前を)保存する前にデータを検証している場合は、私がモデルに投票.. modelセクションに

Reference

+3

同意*ビジネスロジックは含まれていません*。 –

+0

フォーム検証部ですか?フォームに値があることを確認するだけですか?だから、$ _POST配列をモデルに渡すことができますか? – Dietpixel

0

これを入れてください。

MVCフレームワークは、各モデルのデータを検証できる必要があります。

最後に、MVCはアーキテクチャです。決定的なパターンはありません。それはあなた次第です。多くの時間の一貫性が得られます。つまり、モデルではなくコントローラに配置したい場合は、コード全体で行います。

1

これはPHP内のMVCについて説明する偉大な記事です Oreilly上記の答えは正しいですが、実際にMVCを使用するためには、それぞれの部分がなぜうまくいくのかについてある程度の理解が必要です記事はあなたを正しい方向に押し込むでしょう。

Controller$_POST配列を収集し、Modelに渡すべきである:懸念の完全な分離のための理想的

2

モデルレイヤのチェックでデータベースの整合性が保証されている必要があります。これらのチェックはすべてあなたのu.validate()メソッド内になければなりません。

コントローラレイヤーに最適化としてチェックを追加したり、一部のビューアクションを実行したりすることがあります。

私はこのようにリファクタリングします。

コントローラコード

$u = new User(); 
    $u.name = $_POST['name']; 
    $u.email = $_POST['email']; 
    if ($u.validate() && $u.save()) { 
     // success code 
    } else { 
     // fail 
    } 

モデルコード

class user { 
... 
function validate() { 
    if (empty($this->name) || strlen($this->name) < 1) return false; 
    if (empty($this->name) || strlen($this-email) < 1) return false; 
} 
... 
+0

この例をありがとう。 – Dietpixel

関連する問題