我正在处理我的第一个CodeIgniter应用程序,并且在处理发布数据时遇到了一些困惑。
更具体地说,我了解$this->form_validation->set_rules()
的作用,以及set_value()
在验证失败时如何重新填充输入值,但我不知道的是$this->input->post
是set_value
与trim|htmlspecialchars
等价物相同的值。
据我所知,大多数验证规则都会有一个布尔结果,但是$this->input->post('variable')
之类的那些 - 这些也可以为db查询准备数据。
因此,在我的模型中,我可以在表单验证库处理后访问输入,还是应该在模型中直接对htmlspecialchars
进行额外准备?
我的直觉告诉我,我应该在模型中的SQL之前添加像&
这样的最终处理,因为它实际上是一个特定于数据库的操作(我不希望&
而不是{{1在我的表单输入中,但我希望数据库中有&
。
顺便提一下,在我的阅读中,我确实遇到了$this->validation->variable
,这似乎是以前CI版本中我的问题的答案。
答案 0 :(得分:1)
它们相似,但不完全相同。
您只能在控制器中使用$this->input->post('variable');
。此变量将被验证和清除(如果您决定使用xss_clean
清除它或应用任何其他准备功能)。
set_value()
只能在视图中使用。虽然这不是必需的,但这样做的实际价值与使用$this->input->post
相反,你可以设置一个“默认”值作为第二个参数,如果post值为空则自动使用。
答案 1 :(得分:1)
如上所述set_value()
严格来说是重新填充表单输入 - 没有别的。例如,set_checkbox()
将返回类似checked="checked"
的内容,这显然不是您要发送给模型的内容。
关于应该处理输入验证和准备的位置存在争议的余地,但大多数人都同意应该在控制器中完成。
如果您愿意,可以在模型中进行其他处理,但通常您不希望从模型中访问$_POST
- 这会使模型变得不那么有用。并非所有数据都是直接来自用户,因此最好事先准备好数据并将其作为新的数组/对象发送给模型。该模型不应关心数据的来源。
让表单验证库和控制器层处理用户输入(它的用途),模型可以处理您发送给它的数据。
答案 2 :(得分:0)
开发人员
我同时使用框架工作cakephp和codeignator。我觉得cakephp数据验证最好。配偶你有8个字段,你可以在控制器中用指示符创建验证。验证后,如果填写8个字段,则所有字段都为空,如果错误,则在验证codeignator数据验证刷新页面并清空所有字段后,1个字段将丢失。
但是在蛋糕php中正好相反的数据验证在模型中创建你创建一次验证并在调用模型时使用一些thins然后调用验证exp:add,edit。