2014-03-13 50 views
0

了一個多小時谷歌濫用了之後,我沒有發現這個問題的答案:form_validation配置文件(和回調)

當使用form_validation.php你的驗證規則,是否有可能通過一個動態值的回調?

 array(
        'field' => 'passwordrepeat', 
        'label' => 'סיסמא חוזרת', 
        'rules' => 'passwordsMatch['myDynamicValue']' 
      ), 

這顯然不起作用,因爲它將「myDynamicValue」作爲字符串傳遞。 現在,因爲這個配置文件被加載得這麼早,所以這裏只有可用的資源是CI_Loader,這沒有多大幫助,所以我無法訪問輸入類。

所以我的問題: 可以動態值傳遞到配置文件中,還是應該該規則在控制器中寫入在線

+2

可能應該內嵌寫入控制器 但是您是否檢查兩個密碼是否匹配?這是內置於CI – Chitowns24

+0

它肯定是可能的,但它的方法很糟糕,就像「乘火車去火星之旅」一樣。 ''rules'=>'passwordsMatch ['。$ myDynamicValue。']'' – Kyslik

+0

謝謝你的評論。 @ Chitowns24 - 如果它確實存在內置的codeigniter,我覺得非常愚蠢,請問我可以指點一些文檔嗎?我似乎無法找到任何有關該主題:( Kyslik - 只適用於當它在控制器中內聯。在配置文件$ myDynamicValue不在範圍內,你不能這樣稱呼它 – Patrick

回答

0

回答這個問題有點尷尬的鏈接。

解決方法是您可以將其他字段名稱傳遞給您的回調。 但是,請記住,您所傳遞的是字段而不是實際值。

要獲得實際值,您需要通過$ _POST ['field']訪問它。

例如內置的匹配功能

public function matches($str, $field) 
    { 
     if (! isset($_POST[$field])) 
     { 
      return FALSE; 
     } 

     $field = $_POST[$field]; 

     return ($str !== $field) ? FALSE : TRUE; 
    } 

我覺得有點傻:)

2
$this->form_validation->set_rules('password1', 'Password', 'trim|required|matches[password2]'); 
    $this->form_validation->set_rules('password2', 'Verify Password', 'trim|required'); 

這是我有兩個密碼設置表單驗證。這是什麼,是你設定所有規則

if ($this->form_validation->run() == FALSE) 
    { 
     //Validation failed 
    } 
else 
    { 
     //Validation suceeded carry on 
    } 

後隨之而來這裏是一些文檔

http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html#validationrules

+0

我會+1你,但我會發布我剛剛找到的實際答案。 – Patrick

+0

聽起來不錯,我總是樂於學習! – Chitowns24

0

的問題的答案是有點棘手,但它很容易理解。 問題解決方案在這裏。

application/config/文件夾下創建一個form_validation.php文件。 並且過去的代碼如下。

$config = array(
       array(
       'field' => 'passwordrepeat', 
       'label' => 'סיסמא חוזרת', 
       'rules' => 'passwordsMatch['myDynamicValue']' 
       ), 
      ); 

規則將自動加載提供給$this->form_validation->run();此方法。

你也可以附加更多的數組,我的意思是更多的規則爲不同的控制器。

希望這會幫助你。