2017-03-06 30 views
0

我努力使「任何事情作爲一項規則」的方式工作,笨3:無法訪問與您的字段名會員編號錯誤消息(匿名函數)

https://www.codeigniter.com/userguide3/libraries/form_validation.html#callable-use-anything-as-a-rule

我使用下面的排列的規則:

array(
    'required', 
    array('memnum_unique', array($this->form_validation, 'memnum_unique')) 
) 

然後,我已函數定義如下:

public function memnum_unique() 
{ 
    $memno = $this->CI->input->post('membership_number'); 
    $exists = $this->CI->votes_model->get_field_unique('membership_number', $memno, true); 
    if (!empty($exists)) 
    { 
     $this->CI->form_validation->set_message('memnum_unique', 'The membership number has to be unique. This one has already voted.'); 
     return false; 
    } 
    return true; 
} 

在正常情況下,我會使用is_unique規則,但是上面的函數被修剪下來幷包含更多的驗證條件,所以我必須這樣使用它。

函數被調用 - 我可以驗證。該if (!empty($exists))...部分執行,但不知何故,我仍然得到錯誤信息

Unable to access an error message corresponding to your field name Membership number.(Anonymous function)

表單字段生成的代碼設置這樣在我的「核心」模塊:

public function generate_field($id, $label, $rules, $val = '') 
{ 
    $out = array(
     'id' => $id, 
     'validation' => array(
      'field' => $id, 
      'label' => $label, 
      'rules' => $rules 
     ), 
     'value' => $val 
    ); 
    return $out; 
}  

它創建類似這樣的:

$data['fields']['add_member_membership_number'] = $this->core->generate_field('membership_number', 'Membership number', $this->validation_rules['add_member_membership_number']); 

首先,它不是一個匿名函數,其次,它執行,我想我擁有了一切正確的,所以WH這是不是工作?

+0

我設法讓它通過將函數從我的表單驗證類移動到本地類來工作。即使這解決了眼前的問題,但這是一個糟糕的解決方案,所以仍然在尋找適當的答案,如果有人有我可以嘗試的東西:-)謝謝! –

回答

-1

我遇到了這個確切的問題,但它實際上是在CodeIgniter文檔中解決的:CodeIgniter documentation

當然,由於Callable規則本身不是字符串,它也不是規則名稱。當你想爲他們設置錯誤信息時,這是一個問題。爲了避開這個問題,你可以把這些規則作爲陣列的第二元素,第一個是規則名稱:

有了這個例子:

$this->form_validation->set_rules(
     'username', 'Username', 
     array(
       'required', 
       array('username_callable', array($this->users_model, 'valid_username')) 
     ) 
); 
+0

我正在遵循指南。我正在按照手冊說的方式去做。 –

+0

如果您在MY_Form_validation中定義了「memnum_unique」方法,則應該可以在驗證規則設置中使用「required | memnum_unique」。 – user3320593