Как установить пользовательский фильтр при проверке формы в CodeIgniter? - PullRequest
2 голосов
/ 23 февраля 2012

Я использую проверку CodeIgniter .Вот пример:

$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');

В документации сказано:

Как правило, может использоваться любая встроенная функция PHP, которая принимает один параметр, например htmlspecialchars, trim, MD5 и т. Д..

Что если я хочу, чтобы значение прошло через мой собственный пользовательский фильтр?Например, я бы хотел, чтобы значение было очищено от «badWord».

function curseWordRemove($original = '') {
    return str_replace('badWord', '', $original);
}

CodeIgniter уже предоставляет способы выполнения пользовательской проверки, но не настраиваемые фильтры.Пользовательская проверка возвращает только true или false, а не отфильтрованную строку.

function isPolite($string = '') {
    if (strpos($string, 'badWord') !== false) {
        $this->form_validation->set_message(
            'fieldName',
            'contains a very bad word'
        );
        return false;
    } else {
        return true;
    }
}

1 Ответ

4 голосов
/ 23 февраля 2012

Jojo, вы, должно быть, пропустили руководство пользователя, оно называется callback, а вот документация .

Пример:

<?php

class Form extends CI_Controller {

    public function index()
    {
        $this->load->helper(array('form', 'url'));

        $this->load->library('form_validation');

        $this->form_validation->set_rules('username', 'Username', 'callback_username_check');
        $this->form_validation->set_rules('password', 'Password', 'required');
        $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
        $this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]');

        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('myform');
        }
        else
        {
            $this->load->view('formsuccess');
        }
    }

    public function username_check($str)
    {
        if ($str == 'test')
        {
            $this->form_validation->set_message('username_check', 'The %s field can not be the word "test"');
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }

}
?>

По сути, создайте проверку с именем callback_check_bad_words и соответствующую функцию в вашем контроллере с именем check_bad_words($value).Возврат логического значения в результате (как результат возвращается к проверке).

Поскольку вы можете только передать обратно логическое значение, вам нужно либо использовать глобальную переменную, либо запустить «санитарную обработку» вашего слова.позже вам это не понадобится при проверке, ЕСЛИ ВЫ не захотите остановить его от отправки.

Если вы хотите очистить ввод от плохих слов, просто сделайте это, не проверяйте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...