Agent.Logic_
Agent.Logic_

Reputation: 1593

Custom validation error messages in CodeIgniter config file

I'm new to CodeIgniter (v 3.0.0) (coming from CakePHP), and I'm trying to set custom validation error messages to one of my forms. I'm using a config file to store all my validation rules, as explained here. This is my application/config/form_validation.php file:

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

$config = array(
    'appointments/signup' => array(
        array(
            'field' => 'admin[name]',
            'label' => 'Name',
            'rules' => 'required',
            'errors' => array(
                'required' => 'Please tell us your %s',
            ),
        ),
        array(
            'field' => 'admin[email]',
            'label' => 'Email',
            'rules' => 'required|valid_email|is_unique[users.email]',
            'errors' => array(
                'required' => 'Please enter your %s address',
                'valid_email' => 'Please enter a valid email address',
                'is_unique' => 'That email is already taken. Forgot your password?'
            )
        ),
        array(
            'field' => 'admin[username]',
            'label' => 'Username',
            'rules' => 'required|min_length[4]|max_length[25]|is_unique[user_settings.username]',
            'errors' => array(
                'required' => 'Please choose a %s',
                'min_length' => '%s must me at least 4 characters long',
                'max_length' => '%s cannot exceen 25 characters',
                'is_unique' => '%s is already taken :('
            )
        ),
        array(
            'field' => 'admin[phone_number]',
            'label' => 'Phone number',
            'rules' => 'min_length[0]',
        ),
        array(
            'field' => 'admin[password]',
            'label' => 'Password',
            'rules' => 'required|min_length[8]',
            'errors' => array(
                'required' => 'Please choose a %s',
                'min_length' => '%s must be at least 8 characters long'
            )
        ),
        array(
            'field' => 'admin[passconf]',
            'label' => 'Password',
            'rules' => 'required|matches[admin[password]]',
            'errors' => array(
                'required' => 'Please re-type your %s',
                'matches' => '%ss do not match'
            )
        ),
        array(
            'field' => 'company[company_name]',
            'label' => 'Organization\'s Name',
            'rules' => 'required',
            'errors' => array(
                'required' => 'Please tell us your %s',
            )
        ),
    ),
);

As you can see, I'm trying to set custom validation feedback using the errors array, as detailed here. But I still see the global default The <field name> field is required. message.

Is there a way to set custom validation messages in the config file, without having to edit the global default file?

Upvotes: 7

Views: 4301

Answers (6)

Rajnesh Thakur
Rajnesh Thakur

Reputation: 326

Do not try use direct call to signup(your_func_name). $this->form_validation->run('signup')

Use alternate method - (controller_name/function_name)

$config = array(
   'Authenticate_user/signup' => array(
    array(
            'field' => 'firstname',
            'label' => 'Name',
            'rules' => 'trim|required'
    ),
    array(
            'field' => 'useremail',
            'label' => 'Email ID',
            'rules' => 'trim|required|callback_check_unique_emailid' 

    ),

    array(
            'field' => 'gender',
            'label' => 'Gender',
            'rules' => 'trim|required'
    ),
     array(
            'field' => 'age',
            'label' => 'Age',
            'rules' => 'trim|required'
    ),
     array(
            'field' => 'passcode',
            'label' => 'Password',
            'rules' => 'trim|required'
    ),
     array(
            'field' => 'confirmpasscode',
            'label' => 'Confirm Password',
            'rules' => 'required|matches[passcode]',
            'errors' => array(
            'matches[passcode]' => 'Only number is allowed'
        )
    ),
     array(
            'field' => 'usertype',
            'label' => 'User Type',
            'rules' => 'trim|required'
    ),
     array(
            'field' => 'country',
            'label' => 'Country',
            'rules' => 'trim|required'
    ),
     array(
            'field' => 'state',
            'label' => 'State',
            'rules' => 'trim|required'
    ),
    array(
            'field' => 'category',
            'label' => 'Category',
            'rules' => 'required'
    )

));

then call like it,

if ($this->form_validation->run() == FALSE) {... }

cheers!!!

Upvotes: 0

Catapimba
Catapimba

Reputation: 75

Try to change the order of the keys in your array, something like this:

'appointments/signup' => array(
    array(
        'field' => 'admin[name]',
        'label' => 'Name',
        'errors' => array(
            'required' => 'Please tell us your %s',
        ),
        'rules' => 'required',
    )

The exact same problem was happening to me, and after some debugging on the core classes, I was feeling stupid enough to try this.

Looks like a bug, but I didn't go any further.

I'm using version 3.0.1.



UPDATE

I was wrong, if this was happening on v 3.0.0, is not happening on 3.0.1. What I described above was me making a mistake with parentheses in my array.

Everything is working as it should.

Upvotes: 5

sajendra
sajendra

Reputation: 437

May be you should put your key field within inverted commas like:

'field' => "admin['name']"

Upvotes: 0

Rohan Kumar
Rohan Kumar

Reputation: 40639

Firstly, make sure you are using Codeigniter 3 not any version of Codeigniter 2.x.x.

I was in trouble with the same issue and found that the errors array is available in Codeigniter 3 version and the config rules are set in form_validation's run() method, so if you see the set_rules function in Form_validation.php file you will see the 4th parameter which is errors

/**
 * Set Rules
 *
 * This function takes an array of field names and validation
 * rules as input, any custom error messages, validates the info,
 * and stores it
 *
 * @param   mixed   $field
 * @param   string  $label
 * @param   mixed   $rules
 * @param   array   $errors
 * @return  CI_Form_validation
 */
public function set_rules($field, $label = '', $rules = array(), $errors = array())
{
   .....

And which is not available in 2.2-stable version, see Form_validation.php, and see the piece of code which shows the difference

/**
 * Set Rules
 *
 * This function takes an array of field names and validation
 * rules as input, validates the info, and stores it
 *
 * @access  public
 * @param   mixed
 * @param   string
 * @return  void
 */
public function set_rules($field, $label = '', $rules = '')
{
   ....

Upvotes: 0

Mahdi Majidzadeh
Mahdi Majidzadeh

Reputation: 868

validation error messages comes from language files because each language has own error messages

I think you can change validation error messages in language files.

Upvotes: 2

Sashant Pardeshi
Sashant Pardeshi

Reputation: 1095

Please try use helpers under application/helpers and define your validation errors in function. Then try accessing the validation rules or use errors under application/errors. please refer https://ellislab.com/codeigniter/user-guide/general/helpers.html

Upvotes: 0

Related Questions