在 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 语句来处理不同的场景。我知道这些必须放在某个地方,但哪里最干净?
我知道那里有很多框架,但我正在经历它背后的整个“想了解最佳实践”阶段。或者这完全是错误的方法?控制器实际上应该采用不同的结构吗?