「id」と「url」という2つのフィールドを持つフォームを投稿した後、次のコードを取得します。
_$this->load->library('form_validation');
$this->form_validation->set_rules('id', 'id', 'trim|xss_clean');
$this->form_validation->set_rules('url', 'url|id', 'trim|xss_clean|callback_url_check');
_
Dbクエリには両方のフィールドが必要です。
関数url_check($ str、$ id)が呼び出されますが、この場合、「id」の値は常に0です。
私がやるだけなら:
_$this->form_validation->set_rules('url', 'url', 'trim|xss_clean|callback_url_check');
_
そして、url_check($str)
を呼び出します。
問題は、どのように2つの値をurl_check($str, $id)
に渡すかです。
$ this-> input-> postを直接使用できます:
function check_url() {
$url = $this->input->post('url');
$id = $this->input->post('id');
// do some database things you need to do e.g.
if ($url_check = $this->user_model->check_url($url, $id) {
return TRUE;
}
$this->form_validation->set_message('Url check is invalid');
return FALSE;
}
説明されているように、それを正しい方法で(少なくともCI 2.1+の場合) ドキュメントで :
$this->form_validation->set_rules('uri', 'URI', 'callback_check_uri['.$this->input->post('id').']');
// Later:
function check_uri($field, $id){
// your callback code here
}
これも機能するようです。
$id = 1;
$this->form_validation->set_rules('username', 'Human Username', 'callback_username_check['.$id.']');
function username_check($str, $id) {
echo $id;
if ($str == 'test') {
$this->form_validation->set_message('username_check', 'The %s field can not be the Word "test"');
return FALSE;
}
else {
return TRUE;
}
}
Form_validationを正しく理解している場合、各ルール(set_rules)はフォームの1つのフィールドに対するものであり、コールバックは1つのフィールドのみをチェックします。あなたの場合、「id」は範囲外と思われます。代わりに、配列をset_rules関数に渡して、コールバックを行うことができます。私はまだこれを試していません。 http://codeigniter.com/user_guide/libraries/form_validation.html#validationrulesasarray
他の回答で提案されているように、コールバックパラメータの使用に関する注意事項。検証ルールの作成に_app/config/form_validation.php
_を使用している場合、$this->input->post('parameter')
構文は機能しません。そのオブジェクトは、その内容を読み取る実行の時点ではCIローダーで使用できないためです。ファイル。あなたはあなたのコールバックルーチンで呼び出しを行う必要があります。 :
_public function _validate_user_signup($username, $password) {
$var = $this->input->post('password');
_
この場合、メソッドに渡される2番目のパラメーターにはパスワードが含まれませんが、$ varは呼び出し後に含まれます。
私はそれが明確であることを望みます。マット
検証されているデータを取得するには、フォーム検証ライブラリを使用することをお勧めします。
データが$ _GETまたは$ _POSTになるとは限りません( https://www.codeigniter.com/userguide3/libraries/form_validation.html#validating-an-array-other-than-post を参照) )。
検証コールバック内でデータにアクセスする最良の方法は次のとおりです。
$this->form_validation->validation_data
「validation_data」は、CI_Form_validationクラスのパブリックプロパティです。