简体   繁体   English

Codeigniter规则组表单验证

[英]codeigniter rules group form validation

As the Codeigniter document said that we can create sets of rules inside form_validation.php config file. 正如Codeigniter文档所说,我们可以在form_validation.php配置文件中创建规则集。 I think I have followed the instruction but the problem is that it shows empty error message rather than error message that is set inside the config arrays. 我想我已经按照指示进行了操作,但是问题是它显示的是空错误消息,而不是在配置数组中设置的错误消息。 My form_validation.php config file 我的form_validation.php配置文件

$config = array(
    'users/register' => array(
        array(
            'field' => 'user_type',
            'label' => 'User Type',
            'rules' => 'required|in_list[2,3]',
            'errors' => array(
                'in_list' => '%s Accept only agents or owners!'
            )
        ),
        array(
            'field' => 'first_name',
            'label' => 'First Name',
            'rules' => 'trim|required|alpha_numeric_spaces',
            'errors' => array(
                'required' => 'Required field.',
                'alpha_numeric_spaces' => 'Only letters, number and space are allowed for %s.'
            )
        ),
        array(
            'field' => 'last_name',
            'label' => 'Last Name',
            'rules' => 'trim|required|alpha_numeric_spaces',
            'errors' => array(
                'required' => 'Fields with red asterisk is required!',
                'alpha_numeric_spaces' => 'Only letters, number and space are allowed for %s.'
            )
        ),
        array(
            'field' => 'sex',
            'label' => 'Gender',
            'rules' => 'trim|required|in_list[male,female]',
            'errors' => array(
                'in_list' => 'Optional, %s field must be male or female.'
            )
        ),
        array(
            'field' => 'password',
            'label' => 'Password',
            'rules' =>'trim|required|min_length[6]|max_length[25]',
            'errors' => array(
                'required' => 'Required field.',
                'min_length' => '%s must be between 6-25 characters long.',
                'max_length' => '%s must be between 6-25 characters long.'
            )
        ),
        array(
            'field' => 'confirm_password',
            'label' => 'Password confirmed',
            'rules' => 'trim|required|matches[password]',
            'errors' => array(
                'required' => 'Required field.',
                'matches' => '%s doesn\'t match with password field.'
            )
        ),              
        array(
            'field' => 'email',
            'label' => 'Email',
            'rules' => 'trim|required|is_unique[users.email]|valid_email',
            'errors' => array(
                'required' => 'Required field.',
                'is_unique' => '%s is already taken.',
                'valid_email' => '%s must be valid. For example, johndoe@example.com'
            )
        )
    ),
    'users/update_address' => array(
        array(
            'field' => 'house_number',
            'label' => 'House Number',
            'rules' => 'trim|alpha_numeric_spaces',
            'errors' => array(
                'alpha_numeric_spaces' => 'Only letters, space and number are allowed for %s'
            )
        ),
        array(
            'field' => 'street_number',
            'label' => 'Street Number',
            'rules' => 'trim|alpha_numeric_spaces',
            'errors' => array(
                'alpha_numeric_spaces' => 'Only letters, space and number are allowed for %s'
            )
        ),
        array(
            'field' => 'city_id',
            'label' => 'City or Province',
            'rules' => 'trim|is_natural',
            'errors' => array(
                'is_natural' => 'Only number is allowed for %s'
            )
        ),
        array(
            'field' => 'district_id',
            'label' => 'District or Khan',
            'rules' => 'trim|is_natural',
            'errors' => array(
                'is_natural' => 'Only number is allowed for %s'
            )
        ),
        array(
            'field' => 'commune_id',
            'label' => 'Commune or sangkat',
            'rules' => 'trim|is_natural',
            'errors' => array(
                'is_natural' => 'Only number is allowed for %s'
            )
        )
    )
);

And here is my users controller 这是我的用户控制器

class Users extends AL_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->helper(['url','form']);
        $this->load->model('user');
        $this->load->model('ion_auth_model');
        $this->load->library('form_validation');
    }

public function update_address() {
        header('Content-Type: application/x-json; charset=utf-8');
        if(!$this->ion_auth->logged_in()) {
            redirect(base_url(). 'users/login', 'refresh');
        } else {
            if($this->form_validation->run('update_address') == FALSE) {
                $data['errors'] = validation_errors();
                echo json_encode(array('status' => 'ERROR', 'msg' => 'Your form contains error(s). Please fix it.', 'err' => $data));
            } else {
                $user_id = $this->ion_auth->get_user_id();
                if($this->user->edit_user_address($user_id)) {
                    echo json_encode(array('status' => 'OK', 'msg' => 'Your address has been updated!'));
                } else {
                    echo json_encode(array('status' => 'ERROR', 'msg' => 'Unable to update your address. Please refresh your page and try again.'));
                }
            }
        }
    }
}

And here is the error message show up 这是显示的错误消息

{"status":"ERROR","msg":"Your form contains error(s). Please fix it.","err":{"errors":""}}

I have done something similar to this, but I'm not using class/method name association in the config file. 我已经做了类似的事情,但是我没有在配置文件中使用类/方法名称关联。 I have done like below: 我做了如下:

form_validation.php form_validation.php

$config = array(
    'register' => array(
        array(
            'field' => 'user_type',
            'label' => 'User Type',
            'rules' => 'required|in_list[2,3]',
            'errors' => array(
                'in_list' => '%s Accept only agents or owners!'
            )
        ),
        array(
            'field' => 'first_name',
            'label' => 'First Name',
            'rules' => 'trim|required|alpha_numeric_spaces',
            'errors' => array(
                'required' => 'Required field.',
                'alpha_numeric_spaces' => 'Only letters, number and space are allowed for %s.'
            )
        ),
        array(
            'field' => 'last_name',
            'label' => 'Last Name',
            'rules' => 'trim|required|alpha_numeric_spaces',
            'errors' => array(
                'required' => 'Fields with red asterisk is required!',
                'alpha_numeric_spaces' => 'Only letters, number and space are allowed for %s.'
            )
        ),
        array(
            'field' => 'sex',
            'label' => 'Gender',
            'rules' => 'trim|required|in_list[male,female]',
            'errors' => array(
                'in_list' => 'Optional, %s field must be male or female.'
            )
        ),
        array(
            'field' => 'password',
            'label' => 'Password',
            'rules' =>'trim|required|min_length[6]|max_length[25]',
            'errors' => array(
                'required' => 'Required field.',
                'min_length' => '%s must be between 6-25 characters long.',
                'max_length' => '%s must be between 6-25 characters long.'
            )
        ),
        array(
            'field' => 'confirm_password',
            'label' => 'Password confirmed',
            'rules' => 'trim|required|matches[password]',
            'errors' => array(
                'required' => 'Required field.',
                'matches' => '%s doesn\'t match with password field.'
            )
        ),              
        array(
            'field' => 'email',
            'label' => 'Email',
            'rules' => 'trim|required|is_unique[users.email]|valid_email',
            'errors' => array(
                'required' => 'Required field.',
                'is_unique' => '%s is already taken.',
                'valid_email' => '%s must be valid. For example, johndoe@example.com'
            )
        )
    ),
    'update_address' => array(
        array(
            'field' => 'house_number',
            'label' => 'House Number',
            'rules' => 'trim|alpha_numeric_spaces',
            'errors' => array(
                'alpha_numeric_spaces' => 'Only letters, space and number are allowed for %s'
            )
        ),
        array(
            'field' => 'street_number',
            'label' => 'Street Number',
            'rules' => 'trim|alpha_numeric_spaces',
            'errors' => array(
                'alpha_numeric_spaces' => 'Only letters, space and number are allowed for %s'
            )
        ),
        array(
            'field' => 'city_id',
            'label' => 'City or Province',
            'rules' => 'trim|is_natural',
            'errors' => array(
                'is_natural' => 'Only number is allowed for %s'
            )
        ),
        array(
            'field' => 'district_id',
            'label' => 'District or Khan',
            'rules' => 'trim|is_natural',
            'errors' => array(
                'is_natural' => 'Only number is allowed for %s'
            )
        ),
        array(
            'field' => 'commune_id',
            'label' => 'Commune or sangkat',
            'rules' => 'trim|is_natural',
            'errors' => array(
                'is_natural' => 'Only number is allowed for %s'
            )
        )
    )
);

Controller Class 控制器类

class Users extends AL_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->helper(['url','form']);
        $this->load->model('user');
        $this->load->model('ion_auth_model');
        $this->load->library('form_validation');
    }

public function update_address() {
        header('Content-Type: application/x-json; charset=utf-8');
        if(!$this->ion_auth->logged_in()) {
            redirect(base_url(). 'users/login', 'refresh');
        } else {
            if($this->form_validation->run('update_address') == FALSE) {
                $data['errors'] = validation_errors();
                echo json_encode(array('status' => 'ERROR', 'msg' => 'Your form contains error(s). Please fix it.', 'err' => $data));
            } else {
                $user_id = $this->ion_auth->get_user_id();
                if($this->user->edit_user_address($user_id)) {
                    echo json_encode(array('status' => 'OK', 'msg' => 'Your address has been updated!'));
                } else {
                    echo json_encode(array('status' => 'ERROR', 'msg' => 'Unable to update your address. Please refresh your page and try again.'));
                }
            }
        }
    }
}

NOTE: In autoload.php , I have added $autoload['libraries'] = array('form_validation'); 注意:autoload.php ,我添加了$autoload['libraries'] = array('form_validation'); to load form_validation config. 加载form_validation配置。

Hope this will works for you as well. 希望这也对您有用。 Let me know if you facing any other issues. 让我知道您是否还有其他问题。

application/config/form_validation.php 应用/配置/ form_validation.php

you have defined your form validation rules there 您已经在那里定义了表单验证规则

so you have to load 所以你必须加载

$this->config->load('form_validation');

and try to access config rules as 并尝试以以下方式访问配置规则

$this->form_validation->set_rules($this->form_validation->set_rules($this->config->item('users/update_address'));

see if this help 看看是否有帮助

Finally I found the answer. 终于我找到了答案。 The Codeigniter documentation doesn't say for clear about the class/method name association. Codeigniter文档没有明确说明类/方法名称的关联。 When I'm changing from 当我从

$this->form_validation->run('update_address') == FALSE

to

$this->form_validation->run('users/update_address') == FALSE

However, the message show like below is hard to figure out for sure which error go for which field. 但是,很难确定如下所示的消息,以确定哪个错误出现在哪个字段中。 Any better answer will be appreciated. 任何更好的答案将不胜感激。

{"status":"ERROR","msg":"Your form contains error(s). Please fix it.","err":{"errors":"<p>Only letters, space and number are allowed for House Number<\/p>\n<p>Only letters, space and number are allowed for Street Number<\/p>\n"}}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM