MVC パターンで、単一のビューに同じタイプの複数のアクション (POST など) が含まれる可能性がある場合の最適な処理方法は何ですか?
たとえば、TODO リスト アプリケーションで考えてみましょう。ユーザーが複数のリストを作成できるようにする場合があります。各リストには複数のアイテムを含めることができます。したがって、ユーザーは site.com/list/1 に移動し、最初のリストのすべてのアイテムが表示されます (1 は GET パラメーターです)。このページには、ユーザーが次のことを行えるようにするための 2 つのフォーム (POST) があります。
- 新しいアイテムを作成する
- 既存のアイテムを削除する
ブートストラップが「listcontroller」を作成する必要がある場合は、POST 変数を調べてから、次のような適切なメソッドを呼び出します。
$lc = new ListController();
if(strtolower($request->verb) === 'post'):
if(isset($_POST['title'])) :
$data = $lc->newItem($_POST);
$load->view('newitem.php', $data);
else if(isset($_POST['delete']) && isset($_POST['id'])):
$data = $lc->deleteItem($_POST);
$load-view('deleteitem.php', $data);
endif;// End if post title
else:
//GET request here so show view for single list
endif; //
それとも、次のようなことをしたほうがいいですか
$lc = new ListController();
if(isset($_POST)):
//controller handles logic about what function to call
$data = $lc->PostAction($_POST);
// $data could also potentially hold correct view name based on post
$load->view();
else:
//again just show single list
endif;
さまざまなシナリオを処理するためのネストされた if/else または case ステートメントがかなりある可能性があるため、コントローラーが複数の異なるアクションを潜在的に処理できるようにする最善の方法に苦労しています。私はこれらがどこかに座らなければならないことを知っていますが、どこが最もきれいですか?
そこには多くのフレームワークがあることを知っていますが、その背後にある「ベストプラクティスを理解したい」というフェーズ全体を経験しています。それとも、これは完全に間違った方法ですか?コントローラーは実際に異なる構造にする必要がありますか?