Php Codeigniter表单验证到模型逻辑

Php Codeigniter表单验证到模型逻辑,php,validation,codeigniter,Php,Validation,Codeigniter,我正在开发我的第一个CodeIgniter应用程序,在处理post数据时遇到了一些混乱 更具体地说,我了解$this->form\u validation->set\u rules()的作用,以及set\u value()如何在验证失败时重新填充输入值,但我无法确定的是$this->input->post是否与set\u value等效值相同 我知道大多数验证规则都会有布尔结果,但是像trim | htmlspecialchars这样的规则又如何呢?这些规则还有为db查询准备数据的好处 因此,在

我正在开发我的第一个CodeIgniter应用程序,在处理post数据时遇到了一些混乱

更具体地说,我了解
$this->form\u validation->set\u rules()
的作用,以及
set\u value()
如何在验证失败时重新填充输入值,但我无法确定的是
$this->input->post
是否与
set\u value
等效值相同

我知道大多数验证规则都会有布尔结果,但是像
trim | htmlspecialchars
这样的规则又如何呢?这些规则还有为db查询准备数据的好处

因此,在我的模型中,我可以在表单验证库处理后访问输入,还是应该在模型中直接在
$this->input->post('variable')
上进行额外的准备

我的直觉告诉我,我应该在模型中的SQL之前添加像
htmlspecialchars
这样的最终处理,因为它实际上是一个特定于db的操作(我不希望表单输入中出现
&;
,而希望表单输入中出现
&;
,但我希望数据库中出现
&;


顺便说一句,在我的阅读中,我确实遇到了
$this->validation->variable
,这似乎是我在以前的CI版本中的问题的答案

它们很相似,但并不完全相同

您可以使用
$this->input->post('variable')仅在控制器内。此变量将被验证和清理(如果您决定使用
xss_clean
清理它或应用任何其他准备函数)


set_value()
只能在视图中使用。虽然这不是必需的,但与使用
$this->input->post
相比,这样做的真正价值在于,您可以将“默认”值设置为第二个参数,如果post值为空,则会自动使用该参数。

如前所述
set_value()
仅用于重新填充表单输入,而不是其他。例如,
set\u checkbox()
将返回类似于
checked=“checked”
的内容,这显然不是您想要发送到模型的内容

关于输入验证和准备应该在哪里进行,还有争论的余地,但大多数人都同意应该在控制器中进行


如果愿意,可以在模型中执行其他处理,但通常不希望从模型中访问
$\u POST
,这会降低模型的实用性。并非所有数据都将直接来自用户,因此最好事先准备数据并将其作为新数组/对象发送到模型。模型不应该关心数据来自哪里

让表单验证库和控制器层处理用户输入(它的用途),模型可以处理您发送给它的数据。

我同时使用框架cakephp和codeignator。我觉得最好的事情是cakephp数据验证。在控制器中创建验证时,您有8个字段。验证后,如果您填写了8个字段,并且错误地遗漏了1个字段,则所有字段均为空,然后验证后codeignator数据验证刷新页面并清空所有字段


但是在cake php中,与数据验证相反的是,在模型中创建一次验证,并在调用模型时使用一些东西,然后调用验证exp:add,edit。

Yes(set_值)。如果您使用($this->input->post)使表单粘滞或重新填充,那么它的值将与($this->input->post)相同。它还用于用来自数据库的数据填充更新表单。“模型不应该关心数据来自何处。”这很有道理——谢谢!我已经将$this->input->post移出了我的模型,并从控制器传递了一个数据数组。对不起,这是如何回答这个问题的?