1

私は CodeIgniter 2.3.1 を使用してform_validation.phpファイルを作成しましたconfig。内容は次のとおりです。

<?php
  $config = array(
array(
    'field' => 'firstname',
    'label' => 'First Name',
    'rules' => 'required'
),
array(
    'field' => 'lastname',
    'label' => 'Last Name',
    'rules' => 'required'
),
array(
    'field' => 'email',
    'label' => 'Email',
    'rules' => 'required|valid_email|callback_unique_email'
),
array(
    'field' => 'password',
    'label' => 'Password',
    'rules' => 'required|matches[confirm_password]'
),
array(
    'field' => 'confirm_password',
    'label' => 'Confirm Password',
    'rules' => 'required'
)
 );

function unique_email($email) {
if($email == 'm@gmail.com') {
    $this->form_validation->set_message('unique_email', 'Hello World !');
    return false;
}
 }

?>

そして、コントローラーの機能をチェックform_validationします。コードは以下のとおりです。registeruser

public function register() {
    $this->load->helper('form');
    $data['message'] = '';
    if($this->input->post('submit')) {
        $this->load->library('form_validation');
        if($this->form_validation->run() == FALSE) {
            $data['message'] = 'User could not be saved.';
        } else {
            $user_data['firstname'] = $this->input->post('firstname');
            $user_data['lastname'] = $this->input->post('lastname');
            $user_data['email'] = $this->input->post('email');
            $user_data['password'] = md5($this->input->post('password'));
            if($this->user_model->insert($user_data)) {
                if($this->user_model->login($user_data)) {
                    $this->session->set_flashdata('message', 'User saved successfully.');
                    redirect('/user', 'refresh');
                }
            }
        }
    } 

    $this->load->view('user/register', $data);
}

しかし、カスタム メソッドの検証メッセージが表示されません。それを行う方法を教えてください。作品がより評価されます。

4

2 に答える 2

3

次のドキュメントをご覧ください: http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html#callbacks

ドキュメントでわかるように、カスタム検証関数は実際には構成ファイルではなくコントローラーに属しています。検証関数をコントローラーに移動することで、コールバック関数が呼び出されるようになります。

もう 1 つの興味深い事実として、人々は URL (つまりhttp://yoursite.com/index.php/user/unique_email )を介してこの unique_email 関数にアクセスできます。これを回避するには、次のように、関数の先頭にアンダースコアを配置するだけで、関数をプライベート関数として記述できます。

function _unique_email($email) {
    ...
}

次に、構成で新しい関数名を使用して、検証で関数を呼び出すことができます (コールバックに余分なアンダースコアがあることに注意してください:

array(
    'field' => 'email',
    'label' => 'Email',
    'rules' => 'required|valid_email|callback__unique_email'
)

最終的に、コントローラーは次のようになります。

class User extends CI_Controller {

    public function register() {
        $this->load->helper('form');
        $data['message'] = '';
        if($this->input->post('submit')) {
            $this->load->library('form_validation');
            if($this->form_validation->run() == FALSE) {
                $data['message'] = 'User could not be saved.';
            } else {
                $user_data['firstname'] = $this->input->post('firstname');
                $user_data['lastname'] = $this->input->post('lastname');
                $user_data['email'] = $this->input->post('email');
                $user_data['password'] = md5($this->input->post('password'));
                if($this->user_model->insert($user_data)) {
                    if($this->user_model->login($user_data)) {
                        $this->session->set_flashdata('message', 'User saved successfully.');
                        redirect('/user', 'refresh');
                    }
                }
            }
        } 

        $this->load->view('user/register', $data);
    }

    function _unique_email($email) {
        if($email == 'm@gmail.com') {
            $this->form_validation->set_message('unique_email', 'Hello World !');
            return false;
        }
    }

}

構成は次のようになります。

$config = array(
    array(
        'field' => 'firstname',
        'label' => 'First Name',
        'rules' => 'required'
    ),
    array(
        'field' => 'lastname',
        'label' => 'Last Name',
        'rules' => 'required'
    ),
    array(
        'field' => 'email',
        'label' => 'Email',
        'rules' => 'required|valid_email|callback__unique_email'
    ),
    array(
        'field' => 'password',
        'label' => 'Password',
        'rules' => 'required|matches[confirm_password]'
    ),
    array(
        'field' => 'confirm_password',
        'label' => 'Confirm Password',
        'rules' => 'required'
    )
);
于 2013-03-12T15:53:59.547 に答える
1

この回答を使用してエラーが発生しました:

フィールド名に対応するエラー メッセージにアクセスできません。

関数 _unique_email では、代わりに set_message('unique_email', 'Hello World !'); set_message('_unique_email', 'Hello World !'); にする必要があります。このような:

function _unique_email($email) {
    if($email == 'm@gmail.com') {
        $this->form_validation->set_message('_unique_email', 'Hello World !');
        return false;
    }
}
于 2013-03-31T13:47:51.330 に答える