2017-03-06 3 views
0

私はCodeIgniterの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; 
}  

はそれはのように作成されますこれは:

最初に、それは無名関数ではなく、2番目に実行され、私はすべてが正しいと思うので、wh yはこれが動作していないのですか?

+0

私が作ることに成功し関数をフォームの検証クラスからローカルクラスに移動することで動作します。これは即時の問題を解決しますが、これは馬鹿げた解決策です。誰かが私が試してみることができるものがあれば、まだ適切な答えを探しています:-)ありがとう! –

答えて

-1

私はこの正確な問題に遭遇しましたが、実際にはCodeIgniterのドキュメントではCodeIgniter documentationに記載されています。

もちろん、Callableルール自体は文字列ではないので、ルール名でもありません。これはエラーメッセージを設定するときに問題になります。その問題を回避するためには、あなたが最初のものはルール名であることで、配列の2番目の要素として、このようなルールを置くことができます。この例では

$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

関連する問題