我正在使用 Kohana,但我认为这个问题更笼统。
我一直在 Controller 中进行表单验证,到目前为止效果很好。但是最近,我遇到了一个问题。
我有一个评论模型,我从几个不同的 Controller 向它发送评论。我没有在每个 Controller 中都有一个验证器,而是将它放在模型中。
这很好,因为
- 只有一个地方可以更改/添加验证规则(DRY)
这很糟糕,因为
- 我显然需要向 Controller 返回成功或失败,而 Kohana 的验证库以数组形式返回错误。所以我的返回看起来像这样
关于成功
array('success' => true);
失败
array('success' => false, $errors);
我不禁认为这是错误的。它感觉不对。
如果我在 Controller 中做,我可以简单地做
if ($post->validate()) {
doWhatever();
} else {
$this->template->formErrors = $post->errors('form_errors');
}
哪个(对我来说)似乎更好。
有更好的方法吗?我应该在 Controller 或方法中验证吗?我要疯了吗?
最佳答案
我不认为所有验证规则都可以进入模型。验证是关于表单(或 API)的。事实上,当您验证数据时,大部分事情都取决于上下文。
例如,这是一个登录用户在执行操作吗?您不会将您的身份验证层与正在验证的模型结合起来。因此,所有检查都必须在 Controller 内部进行。该模型与上下文无关;表单“属于” Controller 并且是上下文感知的。
我认为采用 per-form 验证规则 plus basic 对格式良好的数据进行模型内检查是可行的方法。如果您在模型的 validate() 函数中调用 Auth::instance() 或 Session::instance(),那么您做错了。
关于php - MVC 项目中应该在哪里进行表单验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1535345/