From 41cc0908918f48d948fe1e1fc9c74fdec58b7a60 Mon Sep 17 00:00:00 2001 From: Eric Roberts Date: Tue, 24 Jan 2012 00:59:44 -0600 Subject: Better support for using field names and rule parameters in error messages. --- system/language/english/form_validation_lang.php | 46 +++++++++++----------- system/libraries/Form_validation.php | 25 +++++++++++- .../source/libraries/form_validation.rst | 22 +++++++---- 3 files changed, 60 insertions(+), 33 deletions(-) diff --git a/system/language/english/form_validation_lang.php b/system/language/english/form_validation_lang.php index 6afa37a29..a1e02045f 100644 --- a/system/language/english/form_validation_lang.php +++ b/system/language/english/form_validation_lang.php @@ -25,29 +25,29 @@ * @filesource */ -$lang['required'] = "The %s field is required."; -$lang['isset'] = "The %s field must have a value."; -$lang['valid_email'] = "The %s field must contain a valid email address."; -$lang['valid_emails'] = "The %s field must contain all valid email addresses."; -$lang['valid_url'] = "The %s field must contain a valid URL."; -$lang['valid_ip'] = "The %s field must contain a valid IP."; -$lang['min_length'] = "The %s field must be at least %s characters in length."; -$lang['max_length'] = "The %s field cannot exceed %s characters in length."; -$lang['exact_length'] = "The %s field must be exactly %s characters in length."; -$lang['alpha'] = "The %s field may only contain alphabetical characters."; -$lang['alpha_numeric'] = "The %s field may only contain alpha-numeric characters."; -$lang['alpha_dash'] = "The %s field may only contain alpha-numeric characters, underscores, and dashes."; -$lang['numeric'] = "The %s field must contain only numbers."; -$lang['is_numeric'] = "The %s field must contain only numeric characters."; -$lang['integer'] = "The %s field must contain an integer."; -$lang['regex_match'] = "The %s field is not in the correct format."; -$lang['matches'] = "The %s field does not match the %s field."; -$lang['is_unique'] = "The %s field must contain a unique value."; -$lang['is_natural'] = "The %s field must contain only positive numbers."; -$lang['is_natural_no_zero'] = "The %s field must contain a number greater than zero."; -$lang['decimal'] = "The %s field must contain a decimal number."; -$lang['less_than'] = "The %s field must contain a number less than %s."; -$lang['greater_than'] = "The %s field must contain a number greater than %s."; +$lang['required'] = 'The {field} field is required.'; +$lang['isset'] = 'The {field} field must have a value.'; +$lang['valid_email'] = 'The {field} field must contain a valid email address.'; +$lang['valid_emails'] = 'The {field} field must contain all valid email addresses.'; +$lang['valid_url'] = 'The {field} field must contain a valid URL.'; +$lang['valid_ip'] = 'The {field} field must contain a valid IP.'; +$lang['min_length'] = 'The {field} field must be at least {param} characters in length.'; +$lang['max_length'] = 'The {field} field cannot exceed {param} characters in length.'; +$lang['exact_length'] = 'The {field} field must be exactly {param} characters in length.'; +$lang['alpha'] = 'The {field} field may only contain alphabetical characters.'; +$lang['alpha_numeric'] = 'The {field} field may only contain alpha-numeric characters.'; +$lang['alpha_dash'] = 'The {field} field may only contain alpha-numeric characters, underscores, and dashes.'; +$lang['numeric'] = 'The {field} field must contain only numbers.'; +$lang['is_numeric'] = 'The {field} field must contain only numeric characters.'; +$lang['integer'] = 'The {field} field must contain an integer.'; +$lang['regex_match'] = 'The {field} field is not in the correct format.'; +$lang['matches'] = 'The {field} field does not match the {param} field.'; +$lang['is_unique'] = 'The {field} field must contain a unique value.'; +$lang['is_natural'] = 'The {field} field must contain only positive numbers.'; +$lang['is_natural_no_zero'] = 'The {field} field must contain a number greater than zero.'; +$lang['decimal'] = 'The {field} field must contain a decimal number.'; +$lang['less_than'] = 'The {field} field must contain a number less than {param}.'; +$lang['greater_than'] = 'The {field} field must contain a number greater than {param}.'; /* End of file form_validation_lang.php */ diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php index 0a6a2af0d..ebd96e402 100644 --- a/system/libraries/Form_validation.php +++ b/system/libraries/Form_validation.php @@ -503,7 +503,7 @@ class CI_Form_validation { } // Build the error message - $message = sprintf($line, $this->_translate_fieldname($row['label'])); + $message = $this->_build_error_msg($line, $this->_translate_fieldname($row['label'])); // Save the error message $this->_field_data[$row['field']]['error'] = $message; @@ -651,7 +651,7 @@ class CI_Form_validation { } // Build the error message - $message = sprintf($line, $this->_translate_fieldname($row['label']), $param); + $message = $this->_build_error_msg($line, $this->_translate_fieldname($row['label']), $param); // Save the error message $this->_field_data[$row['field']]['error'] = $message; @@ -693,6 +693,27 @@ class CI_Form_validation { return $fieldname; } + // -------------------------------------------------------------------- + + /** + * Build an error message using the field and param. + * + * @param string The error message line + * @param string A field's human name + * @param mixed A rule's optional parameter + * @return string + */ + protected function _build_error_msg($line, $field = '', $param = '') + { + // Check for %s in the string for legacy support. + if (strpos($line, '%s') !== false) + { + return sprintf($line, $field, $param); + } + + return str_replace(array('{field}', '{param}'), array($field, $param), $line); + } + // -------------------------------------------------------------------- /** diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst index e7875bc22..bf06445f9 100644 --- a/user_guide_src/source/libraries/form_validation.rst +++ b/user_guide_src/source/libraries/form_validation.rst @@ -139,7 +139,6 @@ this code and save it to your applications/controllers/ folder:: } } } - ?> Try it! ======= @@ -240,7 +239,6 @@ Your controller should now look like this:: } } } - ?> Now submit the form with the fields blank and you should see the error messages. If you submit the form with all the fields populated you'll @@ -443,7 +441,6 @@ Here's how your controller should now look:: } } - ?> Reload your form and submit it with the word "test" as the username. You can see that the form field data was passed to your callback function @@ -466,7 +463,7 @@ Setting Error Messages ====================== All of the native error messages are located in the following language -file: language/english/form_validation_lang.php +file: system/language/english/form_validation_lang.php To set your own custom message you can either edit that file, or use the following function:: @@ -476,8 +473,18 @@ following function:: Where rule corresponds to the name of a particular rule, and Error Message is the text you would like displayed. -If you include %s in your error string, it will be replaced with the -"human" name you used for your field when you set your rules. +If you'd like to include a field's "human" name or the optional +parameter some rules allow for (such as max_length), you can add the +**{field}** and **{param}** tags to your message, respectively. + + $this->form_validation->set_message('min_length', '{field} must have at least {param} characters.'); + +On a field with the human name Username and a rule of min_length[5], an +error would display: "Username must have at least 5 characters." + +.. note:: The old method of using **%s** in your error messages will +still work, however it will override the tags above. You should use +one or the other. In the "callback" example above, the error message was set by passing the name of the function:: @@ -571,7 +578,7 @@ Try it! Change your form so that it looks like this:: If there are no errors, nothing will be shown. If there is an error, the message will appear. -**Important Note:** If you use an array as the name of a form field, you +.. note:: **Important Note:** If you use an array as the name of a form field, you must supply it as an array to the function. Example:: @@ -723,7 +730,6 @@ function named signup. Here's what your class might look like:: } } } - ?> In your validation config file, you will name your rule group member/signup:: -- cgit v1.2.3-24-g4f1b From b4a294d1f2d93b70059c0c40cf2d32760d3e4bc4 Mon Sep 17 00:00:00 2001 From: Eric Roberts Date: Sat, 14 Apr 2012 17:53:30 -0500 Subject: Fix a merge oopsie in the language file. --- system/language/english/form_validation_lang.php | 28 ------------------------ 1 file changed, 28 deletions(-) diff --git a/system/language/english/form_validation_lang.php b/system/language/english/form_validation_lang.php index 36de4c36f..703f2e7bf 100644 --- a/system/language/english/form_validation_lang.php +++ b/system/language/english/form_validation_lang.php @@ -25,7 +25,6 @@ * @filesource */ -<<<<<<< HEAD $lang['required'] = 'The {field} field is required.'; $lang['isset'] = 'The {field} field must have a value.'; $lang['valid_email'] = 'The {field} field must contain a valid email address.'; @@ -49,33 +48,6 @@ $lang['is_natural_no_zero'] = 'The {field} field must contain a number greater t $lang['decimal'] = 'The {field} field must contain a decimal number.'; $lang['less_than'] = 'The {field} field must contain a number less than {param}.'; $lang['greater_than'] = 'The {field} field must contain a number greater than {param}.'; -======= -$lang['required'] = "The %s field is required."; -$lang['isset'] = "The %s field must have a value."; -$lang['valid_email'] = "The %s field must contain a valid email address."; -$lang['valid_emails'] = "The %s field must contain all valid email addresses."; -$lang['valid_url'] = "The %s field must contain a valid URL."; -$lang['valid_ip'] = "The %s field must contain a valid IP."; -$lang['min_length'] = "The %s field must be at least %s characters in length."; -$lang['max_length'] = "The %s field cannot exceed %s characters in length."; -$lang['exact_length'] = "The %s field must be exactly %s characters in length."; -$lang['alpha'] = "The %s field may only contain alphabetical characters."; -$lang['alpha_numeric'] = "The %s field may only contain alpha-numeric characters."; -$lang['alpha_dash'] = "The %s field may only contain alpha-numeric characters, underscores, and dashes."; -$lang['numeric'] = "The %s field must contain only numbers."; -$lang['is_numeric'] = "The %s field must contain only numeric characters."; -$lang['integer'] = "The %s field must contain an integer."; -$lang['regex_match'] = "The %s field is not in the correct format."; -$lang['matches'] = "The %s field does not match the %s field."; -$lang['is_unique'] = "The %s field must contain a unique value."; -$lang['is_natural'] = "The %s field must contain only positive numbers."; -$lang['is_natural_no_zero'] = "The %s field must contain a number greater than zero."; -$lang['decimal'] = "The %s field must contain a decimal number."; -$lang['less_than'] = "The %s field must contain a number less than %s."; -$lang['less_than_equal_to'] = "The %s field must contain a number less than or equal to %s."; -$lang['greater_than'] = "The %s field must contain a number greater than %s."; -$lang['greater_than_equal_to'] = "The %s field must contain a number greater than or equal to %s."; ->>>>>>> 0f2211711deceb74157d6811116acc0376d3157d /* End of file form_validation_lang.php */ -- cgit v1.2.3-24-g4f1b From 0b05705c52c3bca7f9b3aee657c888e8ad1ff422 Mon Sep 17 00:00:00 2001 From: Eric Roberts Date: Sat, 14 Apr 2012 18:04:17 -0500 Subject: Combine this feature with Fix Issue #935 in another pull request. --- system/language/english/form_validation_lang.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/language/english/form_validation_lang.php b/system/language/english/form_validation_lang.php index 703f2e7bf..3d77e5eda 100644 --- a/system/language/english/form_validation_lang.php +++ b/system/language/english/form_validation_lang.php @@ -43,8 +43,8 @@ $lang['integer'] = 'The {field} field must contain an integer.'; $lang['regex_match'] = 'The {field} field is not in the correct format.'; $lang['matches'] = 'The {field} field does not match the {param} field.'; $lang['is_unique'] = 'The {field} field must contain a unique value.'; -$lang['is_natural'] = 'The {field} field must contain only positive numbers.'; -$lang['is_natural_no_zero'] = 'The {field} field must contain a number greater than zero.'; +$lang['is_natural'] = 'The {field} field must contain an ordinary number greater or equal to zero.'; +$lang['is_natural_no_zero'] = 'The {field} field must contain an ordinary number greater than zero.'; $lang['decimal'] = 'The {field} field must contain a decimal number.'; $lang['less_than'] = 'The {field} field must contain a number less than {param}.'; $lang['greater_than'] = 'The {field} field must contain a number greater than {param}.'; -- cgit v1.2.3-24-g4f1b From 24a13f513f8352339647bf34b77d1eecae9d3b6e Mon Sep 17 00:00:00 2001 From: Eric Roberts Date: Wed, 12 Dec 2012 07:09:42 -0600 Subject: Format tweaks Signed-off-by: Eric Roberts --- system/libraries/Form_validation.php | 4 ++-- user_guide_src/source/libraries/form_validation.rst | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php index 19041bd95..ecd5b18df 100644 --- a/system/libraries/Form_validation.php +++ b/system/libraries/Form_validation.php @@ -819,7 +819,7 @@ class CI_Form_validation { protected function _build_error_msg($line, $field = '', $param = '') { // Check for %s in the string for legacy support. - if (strpos($line, '%s') !== false) + if (strpos($line, '%s') !== FALSE) { return sprintf($line, $field, $param); } @@ -1489,4 +1489,4 @@ class CI_Form_validation { } /* End of file Form_validation.php */ -/* Location: ./system/libraries/Form_validation.php */ +/* Location: ./system/libraries/Form_validation.php */ \ No newline at end of file diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst index acf1e5619..a5348b2a2 100644 --- a/user_guide_src/source/libraries/form_validation.rst +++ b/user_guide_src/source/libraries/form_validation.rst @@ -1078,5 +1078,5 @@ This function is identical to the **set_checkbox()** function above. :: - /> - /> + /> + /> \ No newline at end of file -- cgit v1.2.3-24-g4f1b From 7728e74f4a51576e988602ba2fa4133c2fed7df2 Mon Sep 17 00:00:00 2001 From: Eric Roberts Date: Wed, 12 Dec 2012 07:12:41 -0600 Subject: Find/replace oopsie. Signed-off-by: Eric Roberts --- system/language/english/form_validation_lang.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/language/english/form_validation_lang.php b/system/language/english/form_validation_lang.php index 47c6bbd76..e22b3562c 100644 --- a/system/language/english/form_validation_lang.php +++ b/system/language/english/form_validation_lang.php @@ -42,8 +42,8 @@ $lang['numeric'] = 'The {field} field must contain only numbers.'; $lang['is_numeric'] = 'The {field} field must contain only numeric characters.'; $lang['integer'] = 'The {field} field must contain an integer.'; $lang['regex_match'] = 'The {field} field is not in the correct format.'; -$lang['matches'] = 'The {field} field does not match The {field} field.'; -$lang['differs'] = 'The {field} field must differ from The {field} field.'; +$lang['matches'] = 'The {field} field does not match the {param} field.'; +$lang['differs'] = 'The {field} field must differ from the {param} field.'; $lang['is_unique'] = 'The {field} field must contain a unique value.'; $lang['is_natural'] = 'The {field} field must only contain digits.'; $lang['is_natural_no_zero'] = 'The {field} field must only contain digits and must be greater than zero.'; -- cgit v1.2.3-24-g4f1b From d6a1902297e336276e85d7f06f3bc58c012bc915 Mon Sep 17 00:00:00 2001 From: Eric Roberts Date: Thu, 13 Dec 2012 02:49:58 -0600 Subject: Remove slash! Signed-off-by: Eric Roberts --- user_guide_src/source/libraries/form_validation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst index a5348b2a2..f48e1402d 100644 --- a/user_guide_src/source/libraries/form_validation.rst +++ b/user_guide_src/source/libraries/form_validation.rst @@ -466,7 +466,7 @@ Setting Error Messages ====================== All of the native error messages are located in the following language -file: /system/language/english/form_validation_lang.php +file: system/language/english/form_validation_lang.php To set your own custom message you can either edit that file, or use the following function:: -- cgit v1.2.3-24-g4f1b