Несмотря на комментарии, это совершенно веская причина для использования обратного вызова, подобного правилам "prep", которые фактически изменяют значение введенного ввода (например: trim, xss_clean, strtolower).
Вы на правильном пути, все, что вам нужно сделать, это return $result
в вашем обратном вызове, и это изменит ввод, но убедитесь, что вы вернули строку. Пример:
//callback rule
function _remove_duplicate($str = '')
{
$val = strtolower($str); //make everything lowercase
$colors = str_getcsv($val); //create array
// you could also use explode(',', $colors)
// if you aren't expecting other delimiters than a comma
// i.e. no commas within quotes
$result = array_unique($colors); //remove duplicates
$result = implode(',', $result); // back to string value
return $result; // Return the value to alter the input
}
Теперь, если вы хотите предупредить пользователя, что есть дубликаты, а не просто удалять их, просто return FALSE
, если они есть, возможно, с count($colors) === count($result)
, тогда как $result
все еще является массивом. Это зависит от вас, но вы точно знаете, что можете вернуть true / false или , чтобы изменить доступный ввод.
На самом деле вы могли бы написать что-то подобное в новом правиле проверки формы внутри самого класса Form_validation (расширить библиотеку или даже просто глобальную функцию), и вам не нужно было бы использовать обратные вызовы, кажется, что это будет очень многоразовая функция .
Это считается "подготовительным" правилом. Из руководства пользователя :
В дополнение к функциям проверки, подобным тем, которые мы использовали выше, вы также можете подготовить свои данные различными способами. Например, вы можете настроить правила следующим образом:
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|matches[passconf]|md5');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
В приведенном выше примере мы «обрезаем» поля, преобразовываем пароль в MD5 и запускаем имя пользователя с помощью функции «xss_clean», которая удаляет вредоносные данные.
Как правило, можно использовать любую встроенную функцию PHP, которая принимает один параметр, например htmlspecialchars, trim, MD5 и т. Д.
Примечание. Как правило, вы хотите использовать функции подготовки после правил валидации, поэтому в случае ошибки исходные данные будут показаны в форме.
Итак, после того, как вы проверили правильность ввода, вы можете приступить к его очистке, обрезке, удалению дубликатов из строки, разделенной запятыми, или что угодно. Любые глобально доступные функции являются допустимыми (включая не нативные функции PHP, например: любые вспомогательные функции CI, если они загружены и определены.), А также любые функции, которые принадлежат библиотеке Form_validation или любому ее расширению Вы можете иметь.
Следует помнить одну вещь: если функция не существует или недоступна, она будет игнорироваться. Всегда проверяйте, чтобы убедиться, что вы получаете правильные результаты.
Надеюсь, это прояснит ситуацию.