1

基本的に私は製品を挿入するためのhtmlフォームを持っています。フィールド名と$_POST変数は、私のProductクラスで初期化されます。建設業者は送信ボタンを「聞いています」。ユーザーがフォームを送信すると、オブジェクトの状態が「準備完了」などに変わります。これは、その属性が初期化され、データベースに挿入する準備ができていることを意味します。

次に、挿入のステータス(成功または失敗)に応じてメッセージを返す必要があります。成功した場合は「ProductInsertedSuccessfully」のようなメッセージを出力します。失敗した場合は「Nullfieldsdetected」です。

私の質問は、この種のロジックをビューに入れることが許可されているかどうかです。このような:

<?php $myproduct = new Product(); ?>

<form>
<!-- Fields -->
</form>

<?php
if ($myproduct->ready()) :
    if ($myproduct->insert()) : ?>
        <p>Product inserted successfully</p>
<?php
    else : ?>
        <p>Null fields detected</p>
<?php
    endif;
endif; ?>

insert()の戻りステータスに応じてメッセージを表示する必要があるため、これ以上簡単な方法は考えられません。

では、MVCパターンでその種類のロジックをビューに混在させることは許可されていますか?オブジェクトのステータスをチェックするだけで、いかなる種類のビジネスロジックも公開していません。

4

2 に答える 2

2

いいえ。ドメインのビジネスロジックは、ビュー(またはプレゼンテーション層全体)には存在しません。そのため、MVCにはモデルレイヤーがあります。

フォームを送信するときの操作の順序は次のとおりです。

  1. コントローラは$_POSTデータとともにリクエストを受信します

  2. コントローラは情報をモデルレイヤーに送信します

    • データが有効な場合、モデルレイヤーは情報を保存します
    • データが無効な場合、モデルレイヤーはエラー状態を設定および取得して保存します(通常はセッション中)

  3. POSTコントローラは、送信されたことを現在のビューに通知します

  4. ビューが応答を生成するように要求されると(できればコントローラーではなく)、LocationHTTPヘッダーを送信します(二重投稿を防ぐため)

  5. コントローラは新しいリクエストを受信します(GET今回はパラメータのみ)

  6. 必要に応じて、コントローラーはモデルレイヤーと現在のビューの状態を調整します

  7. ビューは、モデルレイヤーにエラー状態が含まれているかどうかを問い合わせます

    • エラー状態がある場合は、モデルレイヤーからのエラーコードのリクエストリストを表示し、その情報に基づいて、「エラー」メッセージを含むフォームを作成するために使用するテンプレートを選択します。
    • モデルレイヤーにエラー状態がない場合、ビューはテンプレートを使用して「成功」メッセージを作成します

Model2MVCパターンでのフォーム送信の操作の順序があります。

フォーム自体と同じビューにエラーメッセージや成功メッセージを表示するかどうかに応じて、ビューインスタンスはステップ4でモデルレイヤーのエラー状態をチェックする場合があります。次に、ビューはLocation送信するヘッダーを決定できます。

PSモデル層との相互作用は、ほとんどの場合、サービスを通じて発生します。

于 2012-09-11T21:05:53.857 に答える
0

もし私があなたなら、私はその見方ではしません。ロジックでそれを行い、ブール値を設定します。値はオブジェクト自体にある場合もあれば、ビューに渡される場合もあります。

$isInsertedSuccessfully = $myproduct->insert();

または、Productの内部動作に、挿入されているかどうかをテストするメソッドを追加します。例えば:

$myproduct->insert();
if ($myproduct->exists())
{
    //true - must have been inserted
}

または

$myproduct->insert();
if ($myproduct->isSaved())
{
    //true - must have been inserted
}

そんな感じ?

于 2012-09-11T20:51:48.700 に答える