Kyokasuigetsu Kyokasuigetsu - 2 months ago 10
PHP Question

How to customize form validation errors in codeIgniter

Is there a file in codeIgniter in which I could just edit so that I can customize the form validation messages?

enter image description here

I just want to place them in a bulleted list to consume less space.

Here's the code that I'm using to output the error messages:

<div class="alert <?php echo $alert['alert_type']; ?> min-form">
<button type="button" class="close" data-dismiss="alert">x</button>
<h4><?php echo $alert['main_message']; ?></h4>
<?php echo $alert['sub_message']; ?>
</div>


Basically the
$alert['sub_message']
is just getting its data from
validation_errors()
function from CodeIgniter which outputs the validation errors from a form.

Answer

You can extend the form_validation class for maximum control by creating application/libraries/MY_form_validation.php to add extra validation rules - I've attached an example below.

It is bad practice to edit system libraries directly; CI provides better options (overrides/customization thru MY_ classes, libraries, hooks, etc). This gives you the benefit of easily upgrading CI versions & keeps your application portable / custom code isolated from the core framework.

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * CodeIgniter Form Validation Extension
 */
class MY_Form_validation extends CI_Form_validation {

    /**
     *  MY_Form_validation::valid_url
     * @abstract Ensures a string is a valid URL
     */
    function valid_url($url) {
        if(preg_match("/^http(|s):\/{2}(.*)\.([a-z]){2,}(|\/)(.*)$/i", $url)) {
            if(filter_var($url, FILTER_VALIDATE_URL)) return TRUE;
        }
        $this->CI->form_validation->set_message('valid_url', 'The %s must be a valid URL.');
        return FALSE;
    }

    /**
     * MY_Form_validation::alpha_extra()
     * @abstract Alpha-numeric with periods, underscores, spaces and dashes
     */
    function alpha_extra($str) {
        $this->CI->form_validation->set_message('alpha_extra', 'The %s may only contain alpha-numeric characters, spaces, periods, underscores & dashes.');
        return ( ! preg_match("/^([\.\s-a-z0-9_-])+$/i", $str)) ? FALSE : TRUE;
    }

    /**
     * MY_Form_validation::numeric_comma()
     * @abstract Numeric and commas characters
     */
    function numeric_comma($str) {
        $this->CI->form_validation->set_message('numeric_comma', 'The %s may only contain numeric & comma characters.');
        return ( ! preg_match("/^(\d+,)*\d+$/", $str)) ? FALSE : TRUE;
    }

    /**
     * MY_Form_validation::matches_pattern()
     * @abstract Ensures a string matches a basic pattern
     */
    function matches_pattern($str, $pattern) {
        if (preg_match('/^' . $pattern . '$/', $str)) return TRUE;
        $this->CI->form_validation->set_message('matches_pattern', 'The %s field does not match the required pattern.');
        return FALSE;
    }   

}

/* End of file MY_form_validation.php */
/* Location: ./{APPLICATION}/libraries/MY_form_validation.php */