2009-09-01 62 views
1

我寫了一個簡單的回調函數,它不起作用。我的其他回調(在同一個庫文件中)工作正常,所以我猜這個問題與我的代碼有關。Codeigniter表單驗證回調函數不起作用

在回調函數中傳遞的參數採用PHP塊的形式,它是eval()的一部分,在函數本身中形成'if()'語句的一部分。

這裏是在控制器:

$this->form_validation->set_rules('rating', 'Rating','required'); 
$condition = $this->input->post('rating') . " != 'Excellent'"; 
$this->form_validation->set_rules('details', 'Details', 'required_conditional[' . htmlentities($condition) .']'); 

而這裏的回調函數本身:

function required_conditional($str, $condition) 
{ 
    if (eval(html_entity_decode($condition))) { 
     if ($str == '') { 
      $this->set_message('required_conditional', 'The %s field is required'); 
      return FALSE; 
     } 
     else { 
      return TRUE; 
     } 
    } 
} 

任何想法,爲什麼它不工作的人?

謝謝,馬特

+0

心靈張貼的$條件的例子嗎? –

+0

請參閱第一個代碼片段中的第二行。 – user166508

回答

2

這是因爲eval評估報告,沒有表情。這會給你一個解析錯誤:

$test = "1 > 0"; 
if (eval($test)) { echo "echo!"; } 

而當你期望它這將工作:

$test = "return 1 > 0;"; 
if (eval($test)) { echo "echo!"; } 
+0

好的,所以在我上面的示例中,我應該將$ condition更改爲: return $ this-> input-> post('rating')。 「!='優秀'」; ?? 我真的在那裏創建了一個簡化的例子。我真正需要做的是: $ condition =「('」。$ this-> input-> post('exterior_condition_rating')。''!='-1')&&('「。$ this- > input-> post('exterior_condition_rating')。「'!='5 - Excellent')」; 那麼我會如何得到它的工作? – user166508

+0

對不起,沒有意識到換行符會被刪除。希望它仍然可讀! – user166508

+0

'$ condition =「return('」。$ this-> input-> post('exterior_condition_rating')。''!='-1')&&('「。$ this-> input-> post('exterior_condition_rating '')。''!='5 - Excellent');「' – jimyi

2

你不應該用「callback_<function name>」?

+0

我已經擴展了驗證類,並且包含了函數,所以不需要使用callback_前綴。 – user166508

2

沒錯正確的語法來調用表單驗證回調它使用「callback_」