Сообщение об ошибке проверки правильной формы для Codeigniter 2

У меня есть раскрывающаяся папка с именем «business_id».

<select name="business_id"> <option value="0">Select Business</option> More options... </select> 

Вот правило проверки, пользователь должен выбрать опцию.

 $this->form_validation->set_rules('business_id', 'Business', 'greater_than[0]'); 

Проблема заключается в сообщении об ошибке: Поле «Бизнес» должно содержать число больше 0. Не очень интуитивно! Я хочу, чтобы он сказал: «Вы должны выбрать бизнес».

Я пытался:

 $this->form_validation->set_message('Business', 'You must select a business'); 

Но CI complete игнорирует это. У кого-нибудь есть решение для этого?

Не пытайтесь установить атрибут value по умолчанию …

 <select name="business_id"> <option value>Select Business</option> More options... </select> 

а затем просто используя обязательные для вашего правила проверки формы …

 $this->form_validation->set_rules('business_id', 'Business', 'required'); 

Я полагаю, вы могли бы попробовать изменить способ, которым вы также пытаетесь установить сообщение …

 $this->form_validation->set_message('business_id', 'You must select a business'); instead of $this->form_validation->set_message('Business', 'You must select a business'); 

Я не совсем уверен, что это все-таки поможет.

У меня было такое же требование для добавления сообщений об ошибках проверки правильности формы в codeigniter 2 (например, «Вы должны согласиться с нашими Условиями и условиями»). Естественно, было бы неправильно переопределять сообщения об ошибках для require и more_than, поскольку они ошибочно генерируют сообщения для остальной части формы. Я расширил класс CI_Form_validation и переопределил метод set_rules, чтобы принять новый параметр «сообщение»:

 <?php class MY_Form_validation extends CI_Form_validation { private $_custom_field_errors = array(); public function _execute($row, $rules, $postdata = NULL, $cycles = 0) { // Execute the parent method from CI_Form_validation. parent::_execute($row, $rules, $postdata, $cycles); // Override any error messages for the current field. if (isset($this->_error_array[$row['field']]) && isset($this->_custom_field_errors[$row['field']])) { $message = str_replace( '%s', !empty($row['label']) ? $row['label'] : $row['field'], $this->_custom_field_errors[$row['field']]); $this->_error_array[$row['field']] = $message; $this->_field_data[$row['field']]['error'] = $message; } } public function set_rules($field, $label = '', $rules = '', $message = '') { $rules = parent::set_rules($field, $label, $rules); if (!empty($message)) { $this->_custom_field_errors[$field] = $message; } return $rules; } } ?> 

С указанным выше классом вы создадите правило с настраиваемым сообщением об ошибке следующим образом:

 $this->form_validation->set_rules('business_id', 'Business', 'greater_than[0]', 'You must select a business'); 

Вы также можете использовать «% s» в своем пользовательском сообщении, которое автоматически заполнит метку имени поля.

Если вы хотите настроить сообщения об ошибках, отображаемые с каждым правилом, их можно найти в массиве по адресу:

 /system/language/english/form_validation_lang.php 

Вы должны расширить библиотеку Form_validation, как сказал Энтони.

Например, я делаю что-то подобное в файле MY_Form_validation.php который должен быть помещен в /application/libraries

 function has_selection($value, $params) { $CI =& get_instance(); $CI->form_validation->set_message('has_selection', 'The %s need to be selected.'); if ($value == -1) { return false; } else { return true; } } 

В вашем случае, поскольку ваш первый вариант (параметр Guidance – Please select …) имеет значение 0 , вы можете изменить условный оператор от -1 до 0 . Затем, с этого момента, вы можете проверить эту строку для этой строки:

 $this->form_validation->set_rules('business_id', 'Business', 'has_selection'); 

Надеюсь это поможет!

Вот простая функция обратного вызова CI2, которую я использовал. Я хотел чего-то другого, кроме как «обязательного» в качестве параметра по умолчанию для проверки. Документация помогает: http://codeigniter.com/user_guide/libraries/form_validation.html#callbacks

  public function My_form() { ...Standard CI validation stuff... $this->form_validation->set_rules('business_id', 'Business', 'callback_busid'); ... if ($this->form_validation->run() == FALSE) { return false; } else { ...process the form... $this->email->send(); } } // Close My_form method // Callback method function busid($str) { if ($str == '') { $this->form_validation->set_message('business_id', 'Choose a business, Mang!'); return FALSE; } else { return TRUE; } } // Close the callback method 

Для вашего случая вы можете изменить обратный вызов, чтобы проверить, if($str<0) – я предполагаю, что вы использовали числа в своем меню выбора / выпадающего меню.

Если обратный вызов возвращает false, форма сохраняется и отображается сообщение об ошибке. В противном случае он передается и отправляется в «else» form method .

Немного взлома может не понравиться вам, но я сделал это для небольшого изменения.

Например, я хочу изменить сообщение «Поле электронной почты должно быть уникальным значением».

Я сделал это как

 <?php $error = form_error('email'); echo str_replace('field must be a unique value', 'is already in use.', $error); // str_replace('string to search/compare', 'string to replace with', 'string to search in') ?> 

Если строка найдена, тогда она печатает наше пользовательское сообщение, иначе оно отображает сообщение об ошибке, так как оно «Поле электронной почты должно быть действительным адресом электронной почты» и т. Д. …

Имя правила является последним параметром.

Пожалуйста попробуйте:

 $this->form_validation->set_message('greater_than[0]', 'You must select a business'); 

Дополнительная информация: https://ellislab.com/codeigniter/user-guide/libraries/form_validation.html#validationrules

Я расширил библиотеку form_validation с помощью простой функции, которая гарантирует, что выпадающее поле не будет выбрано по умолчанию. Надеюсь это поможет.

Приложение / библиотеки / MY_Form_validation.php

 <?php if (!defined('BASEPATH')) exit('No direct script access allowed.'); class MY_Form_validation extends CI_Form_validation { function __construct() { parent::__construct(); $this->CI->lang->load('MY_form_validation'); } /** * Make sure a drop down field doesn't have its default value selected. * * @access public * @param string * @param field * @return bool * @author zechdc */ function require_dropdown($str, $string_to_compare) { return ($str == $string_to_compare) ? FALSE : TRUE; } } 

приложение / язык / английский / MY_Form_validation_lang.php

 $lang['require_dropdown'] = 'The %s field must have an item selected.'; 

Как использовать:

1) Внесите свою форму в раскрывающийся список:

 <select name="business_id"> <option value="select">Select Business</option> More options... </select> 

2) Создать правило проверки. Возможно, вы сможете установить значение 0 и использовать require_dropdown [0], но я никогда не пробовал это.

 $this->form_validation->set_rules('business_id', 'Business', 'require_dropdown[select]'); 

3) Задайте свое собственное сообщение: (или пропустите этот шаг и используйте его в файле языка.)

 $this->form_validation->set_message('business_id', 'You must select a business'); 

Создать функцию вызова имени пользователя_check

01.

 public function username_check($str) { if ($str=="") { $this->form_validation->set_message('username_check', 'Merci d'indiquer le nombre d'adultes'); return FALSE; } else { return TRUE; } } 

– 02. Затем поместите этот код проверки на свой класс

 $this->form_validation->set_rules('number_adults', 'Label Name','Your Message',) 'callback_username_check'); 

Это может помочь вам

для тех из вас, кто работает над CodeIgniter 3, вы можете сделать следующее:

 $this->form_validation->set_rules('business_id', 'Business', 'greater_than[0]', array( 'greater_than' => 'You must select a business', )); 

И если вы используете CodeIgniter 2, вам нужно будет расширить и переопределить класс CI_Form_validation ( https://ellislab.com/codeigniter/user-guide/general/creating_libraries.html для получения дополнительной информации о том, как это сделать) с новым CodeIgniter 3 CI_Form_validation и используйте вышеприведенную функцию.