【问题标题】:PHP: CodeIgniter $this->form_validation->run() validate twice?PHP:CodeIgniter $this->form_validation->run() 验证两次?
【发布时间】:2013-01-13 09:48:36
【问题描述】:

完成

难道没有机会在控制器动作中使用 $this->form_validation->run() 两次吗? CodeIgniter 似乎只验证第一条规则。我想使用 $this->form_validation->run() 两次,因为我需要第二个验证规则的验证值;)。

$this->form_validation->set_rules(...);
if($this->form_validation->run() === true)
{
    $value = $this->..._model->get( ...);  //use of validated value
    $this->form_validation->set_rules(...); //use of $value
    if($this->form_validation->run() === true)
    {
        //...
    }
}

【问题讨论】:

  • 你真的试过了吗,我看不出它有什么不工作的原因。
  • 是 - 第二个验证规则包含“required”和“greater_than”,并且 Post Var 为空。但是 form_validation->run() 返回 true... o.O
  • 它有可能保存第一次运行的价值吗?虽然这根本没有意义。请参阅下面的答案,看看这是否有效。
  • 嗨,感谢您的帮助 - 我发现了错误。我的规则是:'required|greater_than['。 $val-0.01 .']'。当 CodeIgniter 获得标签值 -0.01 而不是 $val-0.01 的实际结果时,这不起作用。现在验证也工作了两次:)。 Codeigniter 没有任何匹配 >= 的规则,所以我必须进行回调以检查这个?
  • 是的,这将是一个回调函数,很高兴它可以工作。

标签: forms codeigniter validation


【解决方案1】:

在核心文件中 - CodeIgniter_2.1.3/system/libraries/Form_validation.php 添加一行

$this->_field_data = array();

在方法run()中;

public function run($group = '')
    {
        // add this line for clear field data to use validation many times
        $this->_field_data = array();

【讨论】:

    【解决方案2】:

    在加载 form_validation 库时尝试为其分配别名?这可能会解决问题。

    $this->load->library('form_validation','','validation1');
    $this->validation1->set_rules(...);
    if($this->validation1->run() === true)
    {
        $value = $this->..._model->get( ...);  //use of validated value
        $this->load->library('form_validation','','validation2');
        $this->validation2->set_rules(...); //use of $value
        if($this->validation2->run() === true)
        {
            //...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 2021-01-19
      • 2021-12-08
      • 2023-03-09
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多