php - MVC 问题 : Should I put form validation rules in the controller or model?

标签 php codeigniter

一方面,表单验证可以被视为应用程序逻辑的一部分,因此属于模型。

另一方面,它直接处理来自 View 的输入并处理显示错误等。从这个角度来看,将其放入 Controller 中更有意义。

从 MVC 的角度来看,哪种方法是正确的?

P.S 我的表单验证实际上只包括编写字段列表、它们的规则,并将其传递给表单验证库,该库返回 true/false 以判断是否通过验证。

例子:

$this->load->library('form_validation');
$this->form_validation->set_rules('name', 'Name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email');
//........
if ($this->form_validation->validate())
    // Process data
else
    $this->register_form(); //A controller action that will show a view with errors

应该将其放入 Controller 还是模型?

最佳答案

理想情况下,您需要 3 层验证:

  1. View : 客户端(javascript、html5 验证等)。这会在数据到达 Controller 之前捕获明显的错误和遗漏,从而浪费用户的时间并在出现错误时调用不必要的页面加载。
  2. Controller:这是您的 Form 验证层。 Controller 通常旨在直接处理输入,并将其发送到模型。表单中的每个字段在数据库中都有一个直接相关的列是非常罕见的,您通常需要在将数据传递给模型之前以某种方式更改数据。仅仅因为您需要验证一个名为“确认电子邮件”的字段,并不意味着您的模型将处理“确认电子邮件”值。有时,这将是最后的验证步骤。
  3. 模型:这是您验证的最后一道防线,并且可能是您在将数据发送到模型直接来自表单的情况下的唯一验证邮政。很多时候,您需要通过 Controller 调用将数据发送到数据库,或者使用非用户输入的数据。我们不想看到数据库错误,我们想看到应用程序本身抛出的错误。模型通常不应该直接处理 $_POST 数据或用户输入,它们应该从 Controller 接收数据。您不想在这里处理无用的数据,例如电子邮件确认。

关于php - MVC 问题 : Should I put form validation rules in the controller or model?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5651175/

相关文章:

javascript - 如何从返回的响应中获取特定值

php - 我无法将数据添加到我的 mysql 数据库中的表中

php - caching_sha2_password mysql错误

php - 选择一个未显示的随机结果

PHP 数据库输出。数组

php - preg_match 电子邮件主题和正文

php - 使用 Azure 对 Codeigniter 部署进行故障排除

php - MYSQL中获取表中某列为空的值

php - YouTube API无法在Codeigniter中使用

php - 如何调试对 PHP Web 应用程序的 "pending"HTTP 请求?