0

ネットでいろいろ調べたのですが見つからないのでこちらで質問させていただきます。サイトにいくつかのフォームがあり、$_POST をモデルに渡す方法がわかりません。ここでいくつかのオプションを考えました。

方法 1:

モデルから直接アクセスする$_POSTこのアプローチで見られる問題は、モデルがビューに結び付けられているため、モデルが再利用できなくなることです。

方法 2:

投稿情報を含む配列を作成します$dataが、フォームに 10 個以上のフィールドがある場合、このすべての変数を割り当てるのは面倒であり、モデルでは、コントローラーでキーに名前を付けたものを知る必要があります。

方法 3:

各キーをパラメーターとしてモデル関数に渡し$_POSTますが、これは方法 2 と同様の問題を引き起こします。10 個以上のフィールドがある場合は大量のパラメーターになり、後で新しいパラメーターを追加する場合は大量のコードになります。リライト。

他のphpプログラマーがこれをどのように行っているか知りたいです。

4

2 に答える 2

0

モデルはレイヤーです。まず、モデルレイヤーで何が行われているかを理解する必要があります。これについては、こちらを参照してください。

これで問題が解決しました。質問に答えましょう。ビューからモデルレイヤーのある種のサービス/データマッパーにデータを渡したいとします。これは、他のすべてのリクエストと同じように処理されます。

  • アプリケーションへのリクエストを実行する
  • このリクエストを適切なコントローラに送信するルーティング処理
  • XMLHttpRequests を特定のコントローラー/メソッドにのみ許可する何らかのメカニズムがある場合があります。その場合、ルーティングのどこかで、これをチェックする必要があります。
  • モデル層 (おそらく検証サービス) は投稿データを検証し、それが期待どおりであることを確認します。過去に、投稿配列内に特定のキー/値のみが存在することを確認しました。
  • このデータをモデルレイヤーのサービスに渡すと、必要に応じて使用されます。

基本的に、$_POSTリクエストは他のリクエストと同じように扱います。(独自のメソッドまたはフレームワークの組み込みメソッドを使用して) 必要なリクエスト タイプとコンテンツであることを確認してから、通常どおり使用してください。


「多くのフィールド」については、コードの再利用性/繰り返す必要がないことを心配している場合は、ループを使用してクライアント側から必要なデータを取得します (おそらく JavaScript を使用したクラスを介して)。その後、将来さらにデータを追加すると、ループが自動的にデータを取得して送信します。

モデルをもう少し抽象的に考えてください。つまり、ループの入力を処理できるようになり、ゴールデンです。

于 2013-06-25T16:06:11.507 に答える
0

他のフレームワークについてはわかりませんが、Yii では、モデルを使用してフォームを生成するときに、モデル名とフォーム要素の名前の属性を使用します。たとえば、User という名前のモデルがあり、username、firstname、lastname の属性があるとします。次のようなフォームを作成します。

<form>
    <input type='text' name='User[username]' id='User_username'>
    <input type='text' name='User[firstname]' id='User_firstname'>
    <input type='text' name='User[lastname]' id='User_lastname'>
    <input type='submit'>
</form>

このようにして、すべての値が配列に格納されます。次に、次のように簡単に言うことができます。

//DONE INSIDE CONTROLLER
$user = new User();
$user->attributes = $_POST['User'];
//or if you need to you can store individual values
$user->username = $_POST['User']['username'];

この方法でモデルを設定していない場合は、$_POST['User']配列を送信して値を設定できる関数をモデルに簡単に追加できます。

于 2013-06-25T15:49:05.343 に答える