php - MVC 项目中应该在哪里进行表单验证?

标签 php model-view-controller validation kohana

我正在使用 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/

相关文章:

forms - Yii2 要求选择一个或多个复选框的FormBuilder

php - Laravel Eloquent 多步拆分查询

php - Laravel 重定向数据不起作用

java - 当选择 JTable 中的第 0 行时,选择处理程序会发疯

c# - 获取sql中连接列的计数

php - 验证:超越电子邮件地址/电话号码

javascript - 不仅在 'input' 事件上允许在 'keypress' 上 float

php - 通过maximum()检测查询字段

php - 如何向 WordPress 插件添加自定义字段

php - 为什么要在 php 网站中使用 MVC?