2016-02-15 66 views
0

我似乎無法弄清我的問題,希望有人可以幫忙。 我使用笨3 + HMVC,在我的表單驗證我使用規則is_unique它完美的作品,只是如果我想使用回調,我需要擴展CI_form_validation像這樣:CodeIgniter + hmvc form_validation規則「is_unique」不適用

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

「當分配電流控制器爲$ CI變量的form_validation庫之前使用表單驗證與MX則需要延長CI_Form_validation類,如下圖所示,「

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

」。這將使你的回調方法才能正常工作(這已經在CI論壇上討論過了也)。」

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

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

當我進行此修改時,規則「is_unique」停止工作。 有沒有人知道它是什麼?這是一個錯誤?

這是我的代碼:

​​

感謝您的幫助傢伙....我需要休息時間!

回答

3

系統/庫/ Form_validation.php 的1127行中

變化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

這解決了我的問題:) –

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); 
+0

嗨,感謝您的快速回復,我認爲這將工作,如果我正在更新,但在我的情況下,我不是。哦,V3 +不再支持「xss_clean」規則:) –

+0

我的回答對你有幫助嗎? – Angel

+0

不是真的,但謝謝。 –

0

在應用/庫/ 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方法