2012-05-16 18 views
2

Im使用自定義驗證回調執行一些使用codeigniter的表單驗證。codeigniter表格回調值

$this->form_validation->set_rules('testPost', 'test', 'callback_myTest'); 

如果返回值爲TRUE或FALSE,回調將在模型中運行並按預期工作。然而,文檔也說你可以返回你選擇的字符串。

例如,如果我有一個驗證的日期,但是在同一個函數中日期的格式發生了變化,我將如何返回並在控制器中檢索這個新的格式化值?

感謝您閱讀並提供幫助。

+0

a comment down沒有評論?有點苛刻。我確實看看問題是否存在。最近我發現是:http://stackoverflow.com/questions/9486274/codeigniter-how-to-return-data-from-a-form-validation-callback哪沒有回答我的問題 – fl3x7

+0

我不知道你爲什麼得到投票,但這裏是我的+1。這個問題是一個很好的問題。 – itachi

+0

@itachi謝謝:) – fl3x7

回答

1

我不完全確定我得到了你所問的,但這是一個嘗試。

您可以在構造函數中定義一個函數作爲回調,並從該函數內使用您的模型。事情是這樣的:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Controllername extends CI_Controller { 

    private $processedValue; 

    public function index() 
    { 
     $this->form_validation->set_rules('testpost','test','callback'); 

     if ($this->form_validation->run()) { 
     //validation successful 
     echo $this->processedValue; //outputs the value returned by the model 
     } else { 
     //validation failed 
     } 
    } 

    private function callback($input) 
    { 
     $this->load->model('yourmodel'); 
     $return = $this->yourmodel->doStuff($input); 

     //now you have the user's input in $input 
     // and the returned value in $return 

     //do some checks and return true/false 

     $this->processedValue = $return; 
    } 

} 
+0

對不起,不清楚。也許這就是爲什麼有人低估了。我的意思是當我的模型中的回調函數驗證一個值時,它也被處理,在這種情況下,提交日期的格式會改變。我想返回這個新的值,以便我可以在我的控制器中使用它。感謝您的幫助 – fl3x7

+0

在我上面的示例中,當您的模型將值返回給控制器中的'callback'時,您可以將此處理後的值分配給一個私有變量。該值隨後可以根據需要進行訪問。請參閱編輯。 – xbonez

+0

@ fl3x7:這是否解決了您的問題?那是你在找什麼? – xbonez

0

我在codeigniter的Form_validation文件中查看函數_execute。它將var $ _field_data設置爲回調結果(如果結果不是布爾值)。還有另一個函數「set_value」。與您的字段名稱參數一起使用,例如set_value('testPost'),看看你能否得到結果。

+0

感謝您的回覆。所以即時返回新的字符串,然後回顯set_value('testPost'),但該值仍然是原始的預處理值。 – fl3x7

0

的方式Tank_Auth做到這一點的控制器是像這樣

$this->form_validation->set_rules('login', 'Login', 'trim|required|xss_clean'); 

if ($this->form_validation->run()) {   
// validation ok 

$this->form_validation->set_value('login') 

} 

使用form_validation的SET_VALUE方法是無證但是我相信這是他們如何讓登錄的加工值在它被修剪和清理後。

我真的不喜歡設置一個新變量直接從自定義驗證函數存儲此值的想法。

0

編輯:對不起,誤解了這個問題。也許使用自定義回調。或使用PHP $ _POST集(跳過笨)......道歉沒有測試過,但我希望有人能建立在這個...

如:

function _is_startdate_first($str) 
{ 
      $str= do something to $str; 

      or 

      $_POST['myinput'} = do something to $str; 

    } 

====== ==========

這是我如何重命名我的自定義回調:

$this->form_validation->set_message('_is_startdate_first', 'The start date must be first'); 

.....

另外,他再的回調函數:

function _is_startdate_first($str) 
{ 
    $startdate = new DateTime($this->input->post('startdate'), new DateTimeZone($this->tank_auth->timezone())); 
    $enddate = new DateTime($this->input->post('enddate'), new DateTimeZone($this->tank_auth->timezone())); 

    if ($startdate>$enddate) { 
     return false; 
     } else { 
     return true; 
     } 
} 
1
public function myTest($data){ // as the callback made by "callback_myTest" 
    // Do your stuff here 
    if(condition failed) 
    { 
     $this->form_validation->set_message('myTest', "Your string message"); 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 

請嘗試這一個。