【问题标题】:Codeigniter form validation to model logicCodeigniter 表单验证模型逻辑
【发布时间】:2011-06-23 00:39:23
【问题描述】:

我正在开发我的第一个 CodeIgniter 应用程序,在处理发布数据时遇到了一些困惑。

更具体地说,我了解$this->form_validation->set_rules() 的作用,以及set_value() 在验证失败时如何重新填充输入值,但我无法弄清楚$this->input->post 是否与@ 相同的值987654324@ 等价物。

我知道大多数验证规则都会有一个布尔结果,但是像trim|htmlspecialchars 这样的规则呢?这些也有利于为数据库查询准备数据。

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

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

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

【问题讨论】:

  • Yes(set_value) 如果您使用它来使表单保持粘性或重新填充,它将与 ($this->input->post) 的值相同。它还用于使用来自数据库的数据填充更新表单。

标签: php validation codeigniter


【解决方案1】:

它们相似,但不完全相同。

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

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

【讨论】:

    【解决方案2】:

    如前所述,set_value() 严格用于重新填充表单输入 - 仅此而已。例如,set_checkbox() 将返回类似 checked="checked" 的内容,这显然不是您想要发送给模型的内容。

    关于应该在哪里处理输入验证和准备,仍有争论的余地,但大多数人都同意应该在控制器中完成。

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

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

    【讨论】:

    • "模型不应该关心数据的来源。"这很有意义 - 谢谢!我已将 $this->input->post 从模型中移出,并从控制器传递了一个数据数组。
    【解决方案3】:

    开发者

    我同时使用框架 cakephp 和 codeignator。我觉得 cakephp 数据验证最好。配偶,您有 8 个字段表单,您在控制器中使用指示符创建验证。验证后,如果您填写了 8 个字段并且错误地丢失了 1 个字段,则验证后所有字段都为空,然后在验证后 codeignator 数据验证刷新页面并清空所有字段。

    但是在 cake php 中,数据验证正好相反,在模型中创建您创建一次验证并在调用模型时使用一些细化,然后调用验证 exp:添加、编辑。

    【讨论】:

    • 抱歉,这个问题是怎么回答的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    相关资源
    最近更新 更多