首页 文章

未应用CodeIgniter hmvc form_validation规则“is_unique”

提问于
浏览
0

我似乎无法弄清楚我的问题,希望有人可以提供帮助 . 我正在使用codeigniter 3 HMVC,在我的表单验证中我使用规则is_unique它工作正常除了如果我想使用回调,我需要像这样扩展CI_form_validation:

https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc

“在使用MX进行表单验证时,您需要扩展CI_Form_validation类,如下所示,”

<?php
/** application/libraries/MY_Form_validation **/ 
class MY_Form_validation extends CI_Form_validation 
{
    public $CI;
}

“在将当前控制器作为$ CI变量分配给form_validation库之前 . 这将允许您的回调方法正常运行 . (这也在CI论坛上讨论过) . ”

<?php
class Xyz extends MX_Controller 
{
    function __construct()
    {
        parent::__construct();

        $this->load->library('form_validation');
        $this->form_validation->CI =& $this;
    }
}

当我进行此修改时,规则“is_unique”停止工作 . 有没有人知道它是什么?这是一个错误吗?

这是我的代码:

class Prod_parent extends MY_Controller {

    function __construct() {
        parent::__construct();
        $this->load->library('form_validation');
        $this->form_validation->CI =& $this;
    }

 function submit() {
        $this->form_validation->set_error_delimiters('<p style="color:red;">', '</p>');     
        $this->form_validation->set_rules('grupo', 'nombre del grupo', 'trim|required|is_unique[prod_parent.product]');
        if ($this->form_validation->run() == FALSE) {
            $this->session->set_flashdata('error', validation_errors());
            $this->new();
            die();
        } else {
            die('works great');
        }

谢谢你的帮助....我需要喝咖啡休息时间!

3 回答

  • 0

    1127行中的system / libraries / Form_validation.php

    将isset()更改为is_object()

    public function is_unique($str, $field)
    {
        sscanf($field, '%[^.].%[^.]', $table, $field);
        return is_object($this->CI->db)
            ? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
            : FALSE;
    }
    
  • 0

    您可以参考此代码 .

    if($this->input->post('user_name') != $original_value) {
       $is_unique =  '|is_unique[users.user_name]'
    } else {
       $is_unique =  ''
    }
    
    $this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean'.$is_unique);
    
  • 3

    在application / libraries / MY_Form_validation中,只需使用以下代码:

    <?php
    class MY_Form_validation extends CI_Form_validation {
    
    public $CI;
    
    /**
     * Is Unique
     *
     * Check if the input value doesn't already exist
     * in the specified database field.
     *
     * @param   string  $str
     * @param   string  $field
     * @return  bool
     */
    public function is_unique($str, $field)
    {
        sscanf($field, '%[^.].%[^.]', $table, $field);
        //return isset($this->CI->db)
        return is_object($this->CI->db)
            ? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
            : FALSE;
    }
    }
    

    这将覆盖form_validation类的is_unique方法

相关问题