私は現在、3つの選択フィールドを設定するために、dbから3種類のエンティティを取得するコードをコントローラに持っています。コントローラはまた、フォームオブジェクトのvalidateメソッドを呼び出す責任を負い、成功すると、データマッパー上のフォーム入力および呼び出しからエンティティのプロパティをインスタンス化して設定し、それを永続化します。私はコントローラがあまりにも太っていると感じています。フォームの準備と処理コードをどこに置くべきかに関する提案はありますか?それをフォームオブジェクトに移動する必要がありますか? Thxはあなたの時間のために事前に!Zend_Form/MVC、どこで準備と処理が行われるべきですか?
答えて
フォーム処理をフォーム自体に置くことをお勧めします。したがって、フォームにprocess()メソッドを作成すると、すべてのフォームロジックをフォームオブジェクトにカプセル化しておくことができます。お使いのコントローラで例えば
:
$form = myForumClass();
...
$form.process();
あなたはマシューウェアーO'PhinneyによってUsing Zend_Form in Your Modelsを見てみたいことがあります。この種のロジックをコントローラからモデルに移動する方法について説明します。データベースのテーブルについては
こんにちはVika、私はあなたの応答を感謝します。あなたがリンクしたその記事を読んでいます。私に関係することは、作者がsave()のようなモデルメソッドを持っていることです。私は一般的なコンセンサスは、モデルは永続性の手段について何も考えてはならないと思ったのですか? – blacktie24
あなたはモデルを作成する必要があります - これらは取得し、そのテーブルにデータを設定するためのロジックを含める必要があります。したがって、この例では、モデルは配列の値を取得し、コントローラに渡された後にフォームに渡されます。
あなたは、あなたのコントローラに$model = new MyModel();
$element->addMultiOptions($model->getSelectArray());
これを行うあなたはまた、この後、任意のコントローラから呼び出されると、同じフォームを返すことができ、Zend_Form
を拡張し、特定のフォームクラスを作成することができますすることができます
class MyModel
{
public function getSelectArray()
{
//Get stuff from Db here and format into an array ready to add to the form
}
}
- あなたを許しますフォームをどこでも簡単に再利用する - 例えばMy Profileページのように登録ページに同じフォームが必要な場合があります。下記の例として
は、単にこれを行うには私のモデルからの関数である。
public function getSelectArray()
{
$select = $this->select()->order(array("name ASC"));
$categories = $select->query()->fetchAll();
$return = array();
foreach($categories as $category)
$return[$category['id']] = $category['name'];
return $return;
}
- 1. jQueryのイベント処理と準備関数
- 2. 注釈の処理はどこで行われますか?
- 3. Facebookのカスタムオーディエンスに基づく「準備完了」と「準備ができていない」フィルタリングはどこですか?
- 4. WPF ListView - レンダリングされたアイテムを反復処理する準備が整ったときのイベントですか?
- 5. AsyncResultが準備ができていないかどうかはどうすればわかりますか?
- 6. コールスタック内のどこでロールチェックが行われるべきですか?
- 7. NLP処理はいつ実行されるべきですか?
- 8. ここでどこでmySQLクエリを準備する
- 9. jQueryが準備完了でないときにJavaScriptが実行される
- 10. System.Web.Services.Protocols.SoapException:サーバーが要求を処理できませんでした - 装置が準備されていません
- 11. Symfony3 - エンティティの計算はどこで行われるべきですか?
- 12. Magento:Authorize.netテストモードで行われた再処理
- 13. トリガーなどを使用してドキュメントの準備をする準備ができていますか?
- 14. (StaleElementException:Selenium)これをどうすれば処理できますか?
- 15. XMLの解析とカスタムListViewへの入力。すべてはどこで行なわれるべきですか?
- 16. キッチンコンバージドで準備ができています。クライアント.rbを準備中
- 17. LAMPからSAMPへ移行する際の準備と準備について
- 18. 処理がスムーズに行われない
- 19. 本体ツリー内でスクリプトが実行されているときにDOMが準備されていますか?
- 20. call_user_func_array()が準備済みのSQL文を処理するようにする
- 21. クエリを準備するとき、($ stmt = $ mysqli-> prepare($ query))がfalseであるかどうかを確認することはどれくらい重要ですか?
- 22. フォーム処理がReactjsで行われている方法
- 23. 別のスレッドで非同期処理が行われる
- 24. ビューとマージンの間隔が大きいと、処理が行われません。
- 25. python3でオーディオIOとコーデックを処理する方法はどこで知ることができますか?
- 26. HTML5を使用する準備ができていることを知る標準(HTML/XHTML)はどれですか?
- 27. Mysqliの準備、実行、ロールバックを併用できますか?
- 28. python configObjで '='なしの行を処理することができます
- 29. DjangoとCelery - GroupResultの準備ができているかどうかを確認するときのキーエラー
- 30. 準備文とは何ですか?
ねえダニエル、応答のためのTHX。あなたのフォーム処理は、関連するモデルのプロパティを設定し、それらを永続させる責任も負いますか? – blacktie24
はい、フォームが移植可能です。すべてのフォームロジックが個々のフォームクラスに含まれていることを認識して、複数のページにロードされたフォームを簡単に変更できます。 – danielrsmith