Php 什么';在MVC应用程序控制器中处理无效表单的优雅方式是什么?

Php 什么';在MVC应用程序控制器中处理无效表单的优雅方式是什么?,php,model-view-controller,design-patterns,frameworks,Php,Model View Controller,Design Patterns,Frameworks,我有一个自定义的MVC应用程序/框架,其中每个操作都是控制器类中的一个函数 我有一个signup操作,该操作使用请求用户详细信息的表单呈现视图。在提交时,它将发布到一个processSignup操作,该操作验证数据,并将用户插入数据库并重定向到成功页面,或者需要重新显示包含错误的原始视图/表单 signup操作运行多个查询,并将各种数据传递给视图。例如,它需要获得用户可以在下拉列表中选择的可用国家/地区列表,根据用户在以前表单中输入的名称检索建议用户名列表,并从模型中检索其他数据 我正在尝试找出

我有一个自定义的MVC应用程序/框架,其中每个操作都是控制器类中的一个函数

我有一个
signup
操作,该操作使用请求用户详细信息的表单呈现视图。在提交时,它将发布到一个
processSignup
操作,该操作验证数据,并将用户插入数据库并重定向到成功页面,或者需要重新显示包含错误的原始视图/表单

signup
操作运行多个查询,并将各种数据传递给视图。例如,它需要获得用户可以在下拉列表中选择的可用国家/地区列表,根据用户在以前表单中输入的名称检索建议用户名列表,并从模型中检索其他数据

我正在尝试找出如何避免在出现错误时重复所有这些查询以及在我的
processSignup
操作中呈现视图。处理这些情况的标准方法是什么?
signup
操作从以前的表单接收
POST
数据,因此我无法让注册表单提交到自身并基于
GET
vs
POST
进行分支


我可以直接调用
signup
函数,让它接收一个可选参数,以区分正常请求和无效表单的请求,但这似乎有点骇人听闻。其他框架如何处理这种情况?我正在使用PHP,但这更像是一个高级问题,而不是一个特定于该语言的问题

避免重复代码当然不是MVC框架所独有的。标准方法是简单地创建一个私有函数,
signup
processSignup
在呈现视图之前调用该函数。比如:

private function setCommonVars()
{
    // set country, username arrays, etc...

}

至于呈现
signup
视图,MVC的灵活之处在于可以重用视图。您的框架应该有一种在控制器方法中显式选择视图的方法(例如,
$this->view='signup'
)。这样,如果在
processSignup
中发生错误,则可以在渲染之前选择
signup
视图。

是否只使用自己脚本的框架?通常,像Symfony的Zend这样的框架具有处理表单的优秀类,通过验证器运行数据,在验证时,错误将显示相同的表单和错误消息。