私のフォームの1つは、AJAXを使用してデータを送信します。AJAXが原因でページがリロードされないので、form_validation
どのフィールドが間違っているかを検証して出力するために使用できる方法はありますか?私のフォームがjqueryを使用して送信するURLはですcontact/ajax_send
。
まだ検証を挿入していないことを除いて、AJAX全体が正常に機能します。
私のフォームの1つは、AJAXを使用してデータを送信します。AJAXが原因でページがリロードされないので、form_validation
どのフィールドが間違っているかを検証して出力するために使用できる方法はありますか?私のフォームがjqueryを使用して送信するURLはですcontact/ajax_send
。
まだ検証を挿入していないことを除いて、AJAX全体が正常に機能します。
ジョーダンの答えのおかげもあって、方法を見つけました。これにより、エラーのあるフィールドの名前を含む配列が返されます。
// library/MY_Form_validation.php
class MY_Form_validation extends CI_Form_validation {
public function get_field_data(){
return count($this->_field_data) ? $this->_field_data : FALSE;
}
}
// Controller file
$field_data = $this->form_validation->get_field_data();
foreach($field_data as $key=>$val){
if($key == '__proto__') break;
foreach($val as $k=>$v){
if($k == 'error' && !empty($v)) $errors[] = $key;
}
}
$return = array('success'=>FALSE, 'errors'=>$errors);
上記のコードは、error
キーが空かどうかをチェックします。空の値は、CI検証に合格したことを意味しますが、空の値には、を使用したときに表示される文字列が含まれませんvalidation_errors()
。エラーのあるフィールドを探しているので、空でない値を確認するだけで、空でない値は無視されます。
データの送信に ajax を使用しているため、データベースに挿入する前に form_validation コード呼び出しを追加するだけです。
検証エラーがある場合は、フロント エンドにエラー メッセージを json 応答として返して、エラー メッセージを表示することができます。
フォーム検証ライブラリは、発生したすべてのエラーを というプライベート配列に割り当てますが、_error_array
それを公開したり、ドキュメントを提供したりしません (最初のアンダースコアに注意してください)。コントローラーでエラーの json エンコードされたオブジェクトを返すだけです。
echo json_encode($this->form_validation->_error_array);
必要に応じて、CodeIgniter のフォーム検証ライブラリを拡張して、おそらくFALSE
空の配列の代わりに返すことができます...または適切と思われるものは何でも:
/* libraries/MY_Form_validation.php */
<?php
class MY_Form_validation extends CI_Form_validation
{
function __construct($config = array())
{
parent::__construct($config);
}
function error_array()
{
if (count($this->_error_array) === 0) return FALSE;
else return $this->_error_array;
}
}
ここで、コントローラーの最初のアンダースコアを削除します。
echo json_encode($this->form_validation->error_array);
次に、クライアントでエラーをデコードして表示します。