Управление вводом перед его использованием с помощью класса проверки формы CodeIgniter - PullRequest
3 голосов
/ 16 июня 2011

Поскольку вы не можете сделать это: $this->form_validation->set_rules($VARIABLE, 'Some text', 'required');, возможно ли сделать что-то похожее на:

$variable = $this->input->post('some_input');
$variable = some_function_which_manipulates_the_input($variable);

$this->form_validation->set_rules($i_want_the_variable_here, '', '');

, чтобы манипулировать вводом перед проверкой достоверности?Добавление пользовательского обратного вызова кажется мне немного неуклюжим, поскольку один метод может делать несколько вещей (необязательно нацеленных на поле проверки X).

Ответы [ 3 ]

2 голосов
/ 16 июня 2011

Поскольку вы не можете сделать это: $ this-> form_validation-> set_rules ($ VARIABLE, 'Some text', 'required');

Вы, конечно, может сделать это, если $VARIABLE содержит атрибут name поля, которое вы хотите проверить.

Похоже, вы передаете фактическое значение $_POST в качестве первого параметраиз set_rules() - фактически это должно быть имя поля.См. Раздел о настройке правил:

http://codeigniter.com/user_guide/libraries/form_validation.html#validationrules

$ this-> form_validation-> set_rules ();

Приведенная выше функция принимает три параметра в качестве входных данных:

  • Имя поля - точное имя, которое вы дали полю формы.
  • «Человеческое» имя для этого поля, которое будет вставлено в сообщение об ошибке. Имена.
  • Правила проверки для этого поля формы.

Если вы хотите изменить фактическое значение ввода до или после проверки, просто добавьте один или несколько «препарирований»."rules.

http://codeigniter.com/user_guide/libraries/form_validation.html#preppingdata

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

Примечание: как правило, вы захотите использовать функции подготовки после правил валидации, поэтому в случае ошибки исходные данные будут показаны в форме.

Вы также можете использовать правила и раньше, если вы хотите trim() что-то до проверки, например.Обратные вызовы также будут работать, они служат той же цели, что и любая функция библиотеки проверки формы, или любые функции php vanilla - проверяют данные, возвращая TRUE / FALSE, или изменяют данные - просто обратите внимание, что по умолчанию обратный вызов должен принадлежатьк контроллеру запускается валидация. Вы также можете использовать свои собственные вспомогательные функции, все, что доступно текущему скрипту в тот момент, когда данные проверяются.

1 голос
/ 19 июля 2014

Вы можете изменить $_POST напрямую, до проверки формы.

Например

// Populate slug automatically
if (!$this->input->post('slug'))
{
    $_POST['slug'] = url_title($this->input->post('title'), '-', true);
}

$this->form_validation->set_rules('title', 'Title', 'trim|required');
$this->form_validation->set_rules('slug', 'Slug', 'trim|required|is_unique[categories.slug]');

if ($this->form_validation->run())
0 голосов
/ 17 июня 2011

Вы можете поместить входные значения в массив перед правилами валидации. Я не знаю, какие манипуляции вы хотите сделать, но вы можете делать такие вещи

 $dat = array(
           'fname' => filter_var($this->input->post('fname'), FILTER_SANITIZE_STRING),
           'lname' => filter_var($this->input->post('lname'), FILTER_SANITIZE_STRING),
           'email' => filter_var($this->input->post('email'), FILTER_SANITIZE_EMAIL),
           'phone' => $this->input->post('phone'),
           'relate' => filter_var($this->input->post('relate'), FILTER_SANITIZE_STRING),
            );
$this->form_validation->set_rules('lname', 'Last Name', 'required|trim|min_length[3]');

затем на

 $this->db->update('contacts', $dat);

Вы можете использовать большинство элементов массива для манипулирования ими до установки правил

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