Проверка формы 

CodeIgniter обеспечивает комплексную проверку форм и данных, готовит класс, который помогает свести к минимуму объем кода для написания.

Содержимое Страницы

Обзор 

Перед тем, как объяснить как Codeigniter подходит к проверке данных, давайте опишем идеальный сценарий:

  1. Форма отображается.
  2. Вы ее заполняете и отправляете.
  3. Если вы отправили что-то недопустимое или пропустил необходимый пункт, форма отображается заново с вашими данными и с сообщением об ошибке и ее описанием.
  4. Этот процесс продолжается до тех пор, пока не отправите действующую форму.

В конце, скрипт должен:

  1. Проверить наличие требуемых данных.
  2. Проверить, что данные правильного типа и содержат правильные критерии. Например, если отправляется имя пользователя, то оно должно быть проверено на содержание только разрешенных символов. Оно должна быть минимальной длины и не должна превышать максимальную длину. Имя пользователя не может быть уже существующим именем или даже зарезервированным словом и так далее
  3. Санировать данные для безопасности.
  4. Предварительно форматировать данные в случае необходимости (Для этого данные должны быть обрезаны? Закодировать HTML? И т.д.)
  5. Подготовить данные для вставки в базу данных.

Хотя ничего ужасного в вышеописаном процессе нет, все равно требуется значительный объема кода для отображения сообщений об ошибках, для чего обычно устанавливают различные управляющие конструкции в HTML форме. В то время как создать форму просто, реализовывать проверку формы вообще очень неприятно и нудно.

Учебник "Проверка формы" 

Далее следует Учебник для осуществление проверки формы средствами CodeIgniter.

В целях осуществления проверки формы вам понадобятся три вещи:

  1. Файл вида содержащий форму.
  2. Вид файла, содержащий “успешное” сообщение, которое будет отображаться после успешной передачи.
  3. Метод контроллера, чтобы получать и обрабатывать отправленные данные.

Давайте сделаем этих три вещи, используя, пример, форму регистрации.

Форма 

Используя текстовый редактор, создайте форму в файле с названием myform.php. Поместите в него этот код и сохраните его в application/views/ папку:

<html>
<head>
<title>My Form</title>
</head>
<body>

<?php echo validation_errors(); ?>

<?php echo form_open('form'); ?>

<h5>Имя пользователя</h5>
<input type="text" name="username" value="" size="50" />

<h5>Пароль</h5>
<input type="text" name="password" value="" size="50" />

<h5>Подтверждение пароля</h5>
<input type="text" name="passconf" value="" size="50" />

<h5>Email</h5>
<input type="text" name="email" value="" size="50" />

<div><input type="submit" value="Отправить" /></div>

</form>

</body>
</html>

Страница сообщения об успехе 

Используя текстовый редактор, создайте файл с названием formsuccess.php. Поместите в него этот код и сохраните его в application/views/ папку:

<html>
<head>
<title>My Form</title>
</head>
<body>

<h3>Ваша форма была успешно отпралена!</h3>

<p><?php echo anchor('form', 'Заполнить еще раз!'); ?></p>

</body>
</html>

Контроллер 

Используя текстовый редактор, файл контроллера с названием form.php. Поместите в него этот код и сохраните его в application/controllers/ папку:

<?php

class Form extends CI_Controller {

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

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

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

Пробуем! 

To try your form, visit your site using a URL similar to this one:

example.com/index.php/form/

Если вы отправите форму, вы должны просто увидеть перезагрузку формы. Это потому что еще не настроены правила проверки.

Поскольку еще не сказали классу проверки что проверять, он возвращает FALSE (булев false) по умолчанию. ``The run()`` метод возвращает TRUE если он успешно применяет ВСЕ свои правила.

Объяснение 

Вы заметите несколько вещей о вышеуказанной странице:

Форма (myform.php) это стандартная веб-форма с парой исключений:

  1. Она использует хелпер форм для создания начала формы. Технически, в этом нет необходимости. Вы можете создать форму, используя стандартный HTML. Однако преимущество использования помощника заключается в том, что он генерирует URL действия (action), основываясь на URL адресе в конфигурационном файле. Это делает ваше приложение более портативным в случае изменения ваших URL.

  2. В верхней части формы вы видите следующий вызов функции:

    <?php echo validation_errors(); ?>
    

    Эта функция будет возвращать сообщения об ошибках, отправленных валидатором. Если нет сообщения, она возвращает пустую строку.

Контроллер (form.php) имеет один метод: index(). Этот метод инициализирует класс и загружает хелпер проверки формы и хелпер URL, вызываемые в файле вида. Он также запускает процедуру проверки. Основывается на результате проверки, если была неуспешной показывается в форме, иначе - страница успеха.

Настройка правил проверки 

CodeIgniter позволяет задать столько правил проверки для нужного поля, сколько вам необходимо и в нужном порядке, он даже позволяет подготовку и предварительную обработку данных полей одновременно. Для установки правил проверки нужно использовать set_rules() метод:

$this->form_validation->set_rules();

Указанный выше метод принимает три параметра в качестве входных параметров:

  1. Имя поля - точное название имени поля в форме.
  2. “Человеческое” имя для поля, в которое будет вставлено сообщение об ошибке. Например, если поле с именем “user” вы могли бы дать ему человеческое имя “Username”.
  3. Правила валидации для этого поля формы.
  4. (опционально) Установка пользовательских сообщений об ошибках на данные правила для текущего поля. Если этот параметр не указан, будет использоваться параметр по умолчанию.

Примечание

Если вы хотите хранить имя поля в языковом файле, пожалуйста, см. перевод названий полей.

Вот пример. В контроллере (form.php), добавьте этот код чуть ниже инициализации метода валидации :

$this->form_validation->set_rules('username', 'Username', 'required');
$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');

Ваш контроллер теперь должен выглядеть так:

<?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', 'required');
                $this->form_validation->set_rules('password', 'Password', 'required',
                        array('required' => 'You must provide a %s.')
                );
                $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
                $this->form_validation->set_rules('email', 'Email', 'required');

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

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

Примечание

Поля формы заново не заполняются данными при наличии ошибки. Мы вернемся к этому в ближайшее время.

Настройка правил с использованием массива 

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

$config = array(
        array(
                'field' => 'username',
                'label' => 'Username',
                'rules' => 'required'
        ),
        array(
                'field' => 'password',
                'label' => 'Password',
                'rules' => 'required',
                'errors' => array(
                        'required' => 'You must provide a %s.',
                ),
        ),
        array(
                'field' => 'passconf',
                'label' => 'Password Confirmation',
                'rules' => 'required'
        ),
        array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required'
        )
);

$this->form_validation->set_rules($config);

Каскадные правила 

CodeIgniter позволяет объеденить несколько правил вместе. Давайте попробуем. Измените правила в третем параметре метода правил настройки, на это:

$this->form_validation->set_rules(
        'username', 'Username',
        'required|min_length[5]|max_length[12]|is_unique[users.username]',
        array(
                'required'      => 'You have not provided %s.',
                'is_unique'     => 'This %s already exists.'
        )
);
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required|matches[password]');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');

Приведенный выше код устанавливает следующие правила:

  1. Поле имени пользователя не должно быть меньше 5 символов и превышать 12.
  2. Поле пароля должно совпадать с полем подтверждения пароля.
  3. Поле электронной почты должно содержать корректный адрес.

Давайте попробуем! Отправьте форму без соответствующих данных и увидите новые сообщения об ошибках, соответствующие новым правилам. Существуют многочисленные правила, с которыми вы можете ознакомиться перейдя в раздел настроек.

Примечание

Вы можете также передавать массив правил set_rules(), вместо строки. Например:

$this->form_validation->set_rules('username', 'Username', array('required', 'min_length[5]'));

Готовим данные 

В дополнение к методу проверки, как тот, что мы использовали выше, можно также подготовить данные различными способами. Например, вы можете установить такие правила:

$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[8]');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required|matches[password]');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');

В приведенном выше примере, мы “обрезаем” поля, проверяем длину там где это необходимо и убеждаемся, что оба поля паролей совпали.

Любая родная PHP функция, которая принимает один параметр может быть использована, как правило это ``htmlspecialchars()``, ``trim()`` и т.д.

Примечание

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

Повторное заполнение формы 

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

set_value('field name')

Откройте myform.php файл вида и обновите значение каждого поля с помощью set_value() функции:

Не забудьте указать имя каждого поля в :php:func:`set_value()` вызовах функции!

<html>
<head>
<title>My Form</title>
</head>
<body>

<?php echo validation_errors(); ?>

<?php echo form_open('form'); ?>

<h5>Username</h5>
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" />

<h5>Password</h5>
<input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" />

<h5>Password Confirm</h5>
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" />

<h5>Email Address</h5>
<input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />

<div><input type="submit" value="Submit" /></div>

</form>

</body>
</html>

Теперь перезагрузите страницу и отправьте форму с ошибками. Поля формы должны теперь быть повторно заполнены.

Примечание

Раздел настройки класса, описанный ниже, содержит методы, позволяющие осуществлять повторное заполнение полей типа <select>, radio и checkboxes.

Важно

Если вы используете массив в качестве имен полей формы, то должны передавать его массивом в функцию. Пример:

<input type="text" name="colors[]" value="<?php echo set_value('colors[]'); ?>" size="50" />

Для получения дополнительной информации обратитесь к разделу использовние массивов в качестве имен полей, описанному ниже.

Обратные вызовы (колбэки): собственные методы проверки 

Система проверки поддерживает обратные вызовы, ваших собственных методов проверки. Это позволяет расширить класс валидации для удовлетворения ваших потребностей. Например, если нужно выполнить запрос к базе данных, чтобы увидеть, что пользователь выбирает уникальное имя пользователя, то можете создать метод обратного вызова, который будет это делать. Давайте создадим такоq пример.

В контроллере, измените правило для “username” на это:

$this->form_validation->set_rules('username', 'Username', 'callback_username_check');

Затем добавьте новый метод username_check() в контроллер. Вот как контроллер должен выглядеть теперь:

<?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 {field} field can not be the word "test"');
                        return FALSE;
                }
                else
                {
                        return TRUE;
                }
        }

}

Перезагрузите форму и отправьте ее со словом “test” в качестве username. Вы можете наблюдать, что данные полей формы передали ваш метод колбэка в процесс.

Для вызова колбэка просто поставьте имя метода в правило, с “callback_” префиксом. Если необходимо получить дополнительный параметр в методе обратного вызова, просто добавьте его после имени метода в квадратных скобках, типа: “callback_foo**[bar]**”, после чего он будет передан в качестве второго аргумента в метод колбэка.

Примечание

Вы можете также работать с данными формы передаваемые в функцию обратного вызова и возвращать их. Если колбэк возвращает отличное от логического TRUE/FALSE предполагается, что данные будут обрабатываться снова.

Вызываемые: использовать что-либо как правило 

Если правила колбэка недостаточно хороши (например, из-за ограничений в контроллере), не расстраивайтесь , есть еще один способ создания пользовательских правил: где всё is_callable() будет возвращать TRUE.

Рассмотрим следующий пример:

$this->form_validation->set_rules(
        'username', 'Username',
        array(
                'required',
                array($this->users_model, 'valid_username')
        )
);

Приведенный выше код должен использовать valid_username() метод из Users_model объекта.

Это просто пример, и обратные вызовы не ограничены моделями. Вы можете использовать объект/метод который принимает значение поля первым параметром. Или если у вас PHP 5.3+ вы можете также использовать анонимную функцию:

$this->form_validation->set_rules(
        'username', 'Username',
        array(
                'required',
                function($value)
                {
                        // Проверка $value
                }
        )
);

Конечно, вызываемое правило само по себе не является строкой и не является правилом. Это является проблемой при создании сообщений об ошибках для них. Чтобы решить эту проблему, вы можете поместить правила вторым элементом массива, где первый является именем правила:

$this->form_validation->set_rules(
        'username', 'Username',
        array(
                'required',
                array('username_callable', array($this->users_model, 'valid_username'))
        )
);

Анонимная функция (PHP 5.3+):

$this->form_validation->set_rules(
        'username', 'Username',
        array(
                'required',
                array(
                        'username_callable',
                        function($str)
                        {
                                // Проверяет валидность $str и возвращает TRUE или FALSE
                        }
                )
        )
);

Настройка сообщений об ошибках 

Все сообщения об ошибках расположены в следующем языковомй файле: system/language/english/form_validation_lang.php

Чтобы установить свои собственные глобальные пользовательские сообщения, вы можете либо расширить/переопределить языковой файл, создав свой собственный в application/language/english/form_validation_lang.php (подробнее об этом в документации языкового класса) или использовать следующий метод:

$this->form_validation->set_message('rule', 'Error Message');

Если необходимо установить пользовательское сообщение об ошибке для конкретного поля какого-нибудь правила, используйте set_rules() метод:

$this->form_validation->set_rules('field_name', 'Field Label', 'rule1|rule2|rule3',
        array('rule2' => 'Error Message on rule2 for this field_name')
);

Где правило соответствует названию конкретного правила, а сообщение об ошибке - текст который будет отображен.

Если вы предпочитаете включить “человеческие” имена полей или необязательный параметр (например, max_length), то можете добавить {field} и {param} теги к сообщению, соответственно:

$this->form_validation->set_message('min_length', '{field} должен иметь как минимум {param} символов.');

Для поля с человеческим именем Username и правилом min_length[5], текст ошибки установлен следующий: “Username должен иметь как минимум 5 символов.”

Примечание

Если старый sprintf() метод содержит %s в ваших сообщения об ошибках, то они будут по-прежнему работать, однако она перекрывает теги выше. Вы должны использовать один или другой способ.

В колбэк правиле примера выше, сообщение об ошибке было установлено в передаваемом имени метода (без “callback_” префикса):

$this->form_validation->set_message('username_check')

Перевод названий полей 

Если вы хотите хранить “человеческие” имена передоваемые в метод set_rules() в языковом файле, то названия могут быть переведены вот как:

Во-первых, укажите префикс для “человеческого” имени используя lang:, как в этом примере:

$this->form_validation->set_rules('first_name', 'lang:first_name', 'required');

Затем, сохраните имя в массив вашего языкового файла (без префикса):

$lang['first_name'] = 'First Name';

Примечание

Если вы храните элемент массива в языковом файле, который не загружается автоматически CI, вам следует помнить, что загрузить его в контроллер нужно с помощью:

$this->lang->load('file_name');

Смотрите страницу языкового класса для более подробной информации о языковых файлах.

Изменение разделителей ошибок 

По умолчанию, класс проверки(валидации) форм добавляет тег абзаца (<p>) вокруг появляющейся ошибки. Вы можете изменить эти разделители глобально, индивидуально или установить значения по умолчанию в файле конфигурации.

  1. Глобальное изменение разделителей для глобального изменения разделителей ошибки, в методе контроллера после загрузки класса валидации формы добавьте это:

    $this->form_validation->set_error_delimiters('<div class="error">', '</div>');
    

    В этом примере мы использовали теги div.

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

    <?php echo form_error('field name', '<div class="error">', '</div>'); ?>
    

    Or:

    <?php echo validation_errors('<div class="error">', '</div>'); ?>
    
  3. Назначение разделителей в файле конфигурации вы можете назначить разделители ошибки в application/config/form_validation.php как показано:

    $config['error_prefix'] = '<div class="error_prefix">';
    $config['error_suffix'] = '</div>';
    

Показ индивидуальных ошибок 

Если вы предпочитаете, показать сообщения об ошибках напротив каждого поля формы, а не в виде списка, вы можете использовать form_error() функцию.

Попробуйте! Измените форму так, чтобы она выглядела следующим образом:

<h5>Username</h5>
<?php echo form_error('username'); ?>
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" />

<h5>Password</h5>
<?php echo form_error('password'); ?>
<input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" />

<h5>Password Confirm</h5>
<?php echo form_error('passconf'); ?>
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" />

<h5>Email Address</h5>
<?php echo form_error('email'); ?>
<input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />

Если ошибок нет, то ничего не будет показано. Если есть - появится сообщение.

Важно

Если вы используете в качестве имен полей формы массив, то должны передавать его как массив в функцию. Пример:

<?php echo form_error('options[size]'); ?>
<input type="text" name="options[size]" value="<?php echo set_value("options[size]"); ?>" size="50" />

Для получения дополнительной информации обратитесь к разделу ниже использование массивов в качестве имен полей.

Проверка массива (отличного от $_POST) 

Иногда необходимо проверить массив не связанный с $_POST данными.

В этом случае можно указать массив, который будет проверен:

$data = array(
        'username' => 'johndoe',
        'password' => 'mypassword',
        'passconf' => 'mypassword'
);

$this->form_validation->set_data($data);

Создание правила проверки и получение сообщений об ошибках работает так же, как для проверки $_POST данных или другого массива.

Важно

Необходимо вызвать set_data() метод перед определением правил проверки.

Важно

Если вы хотите проверить более одного массива за один раз, то следует вызвать reset_validation() метод перед настройкой правил и проверкой нового массива.

Для получения дополнительной информации обратитесь к разделу ниже настройки класса.

Сохранение набора правил валидации в файле конфигурации 

Приятная особенность класса валидации форм заключается в том, что он позволяет хранить все ваши правила валидации для всего приложения в конфигурационном файле. Вы можете объединять правила в “группы”. Эти группы могут быть загружены автоматически, при вызове соответствующего контроллера/метода или вы можете вручную вызвать каждую группу по мере необходимости.

Как сохранить правила 

Для хранения правил валидации, достаточно создать файл с именем form_validation.php в application/config/ папке. В этот файл нужно поместить массив ваших правил с именем $config. Как было показано ранее, проверка массива будет соответствовать этому прототипу:

$config = array(
        array(
                'field' => 'username',
                'label' => 'Username',
                'rules' => 'required'
        ),
        array(
                'field' => 'password',
                'label' => 'Password',
                'rules' => 'required'
        ),
        array(
                'field' => 'passconf',
                'label' => 'Password Confirmation',
                'rules' => 'required'
        ),
        array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required'
        )
);

Файл проверки правил будет загружен и использован автоматически при вызове run() метода.

Обратите внимание, вы ДОЛЖНЫ назвать массив - $config.

Создание наборов правил 

Для того, чтобы организовать ваши правила в “наборы” необходимо разместить их во “вложенных массивах”. Рассмотрим следующий пример, показывающий два набора правил. Мы специально назвали эти два правила “signup” и “email”. Вы можете называть правила как душе угодно:

$config = array(
        'signup' => array(
                array(
                        'field' => 'username',
                        'label' => 'Username',
                        'rules' => 'required'
                ),
                array(
                        'field' => 'password',
                        'label' => 'Password',
                        'rules' => 'required'
                ),
                array(
                        'field' => 'passconf',
                        'label' => 'Password Confirmation',
                        'rules' => 'required'
                ),
                array(
                        'field' => 'email',
                        'label' => 'Email',
                        'rules' => 'required'
                )
        ),
        'email' => array(
                array(
                        'field' => 'emailaddress',
                        'label' => 'EmailAddress',
                        'rules' => 'required|valid_email'
                ),
                array(
                        'field' => 'name',
                        'label' => 'Name',
                        'rules' => 'required|alpha'
                ),
                array(
                        'field' => 'title',
                        'label' => 'Title',
                        'rules' => 'required'
                ),
                array(
                        'field' => 'message',
                        'label' => 'MessageBody',
                        'rules' => 'required'
                )
        )
);

Вызов конкретной группы правил 

Для того, чтобы вызвать конкретную группу, необходимо передать имя в run() метод. Например, чтобы вызвать signup правила нужно сделать это:

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

Связывание метода контроллера с правилом группы 

Альтернативный (и более автоматический) способ вызова группы правил - назвать его в соответствии с контроллером класс/метод, который вы намерены использовать. Например, пусть у вас есть контроллер с именем Member и метод с именем signup. Вот как это должно выглядеть:

<?php

class Member extends CI_Controller {

        public function signup()
        {
                $this->load->library('form_validation');

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

В файл проверки конфигурации, у вас будет название группы правил member/signup:

$config = array(
        'member/signup' => array(
                array(
                        'field' => 'username',
                        'label' => 'Username',
                        'rules' => 'required'
                ),
                array(
                        'field' => 'password',
                        'label' => 'Password',
                        'rules' => 'required'
                ),
                array(
                        'field' => 'passconf',
                        'label' => 'PasswordConfirmation',
                        'rules' => 'required'
                ),
                array(
                        'field' => 'email',
                        'label' => 'Email',
                        'rules' => 'required'
                )
        )
);

Когда правило группы называется одинаково с контроллером класс/метод, оно будет использоваться автоматически при вызыве run() метода из класс/метод.

Использование массивов в качестве имен полей 

Класс проверки формы поддерживает использование массивов в качестве имен полей. Рассмотрим пример:

<input type="text" name="options[]" value="" size="50" />

Если вы используете массив в качестве имен полей, вы должны использовать ТОЧНОЕ имя массива в хелпере функций которое требует имя поля и правила проверки имени поля.

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

$this->form_validation->set_rules('options[]', 'Options', 'required');

Или чтобы показать сообщение об ошибке для поля указанного выше, можно использовать:

<?php echo form_error('options[]'); ?>

Или для повторного заполнения поля можно использовать:

<input type="text" name="options[]" value="<?php echo set_value('options[]'); ?>" size="50" />

Вы также, можете использовать многомерный массив в качестве имен полей. Например:

<input type="text" name="options[size]" value="" size="50" />

Или даже:

<input type="text" name="sports[nba][basketball]" value="" size="50" />

Как и в первом примере, вы должны использовать точное имя массива хелпера функции:

<?php echo form_error('sports[nba][basketball]'); ?>

Если вы используете чекбоксы (или другие поля) которые имеют несколько значений, не забудьте оставить пустые скобки после каждого варианта и все выбранные элементы будут добавлены в массив POST:

<input type="checkbox" name="options[]" value="red" />
<input type="checkbox" name="options[]" value="blue" />
<input type="checkbox" name="options[]" value="green" />

Или если у вас многомерный массив:

<input type="checkbox" name="options[color][]" value="red" />
<input type="checkbox" name="options[color][]" value="blue" />
<input type="checkbox" name="options[color][]" value="green" />

При использовании хелпера функции необходимо будете добавлять скобки:

<?php echo form_error('options[color][]'); ?>

Настройки правил 

Ниже приведен список всех встроенных правил, которые доступны для использования:

Правило Параметр Описание Пример
required Нет Возвращает FALSE если элемент формы пуст.  
matches Да Возвращает FALSE если элемент формы не совпадает с параметром. matches[form_item]
regex_match Да Возвращает FALSE если элемент формы не соответствуют регулярному выражению. regex_match[/regex/]
differs Да Возвращает FALSE если элемент формы не отличается от указанного в параметре. differs[form_item]
is_unique Да Возвращает FALSE если элемент формы не является уникальным для таблицы и имени поля в параметре. Примечание: Это правило требует чтобы был включен квейри билдер. is_unique[table.field]
min_length Да Возвращает FALSE если элемент формы меньше, чем значение параметра. min_length[3]
max_length Да Возвращает FALSE если элемент формы больше, чем значение параметраe. max_length[12]
exact_length Да Возвращает FALSE если элемент формы не точное значение параметра. exact_length[8]
greater_than Да Возвращает FALSE если элемент формы меньше или равно значению этого параметра или не число. greater_than[8]
greater_than_equal_to Да Возвращает FALSE если элемент формы меньше, чем значение параметра или не число. greater_than_equal_to[8]
less_than Да Возвращает FALSE если элемент формы больше или равно значению этого параметра или не число. less_than[8]
less_than_equal_to Да Возвращает FALSE если элемент формы больше, чем значение параметра или не число. less_than_equal_to[8]
in_list Да Возвращает FALSE если элемент формы не входит в заданный список. in_list[red,blue,green]
alpha Нет Возвращает FALSE если элемент формы содержит что-нибудь еще кроме буквенных символов.  
alpha_numeric Нет Возвращает FALSE если элемент формы содержит что-нибудь кроме алфавитно-цифровых символов.  
alpha_numeric_spaces Нет Возвращает FALSE если элемент формы содержит что-нибудь кроме алфавитно-цифровых символов или пробелов. Следует использовать после обрезки, чтобы избежать пробелов в начале и/или в конце.  
alpha_dash Нет Возвращает FALSE если элемент формы содержит что-нибудь кроме алфавитно-цифровых символов, знаков подчеркивания или тире.  
numeric Нет Возвращает FALSE если элемент формы содержит что-нибудь кроме цифр.  
integer Нет Возвращает FALSE если элемент формы содержит что-нибудь кроме целого числа.  
decimal Нет Возвращает FALSE если элемент формы содержит что-нибудь кроме десятичного числа.  
is_natural Нет Возвращает FALSE если элемент формы содержит что-нибудь кроме натурального числа: 0, 1, 2, 3, 5 и т.д.  
is_natural_no_zero Нет Возвращает FALSE если элемент формы содержит что-нибудь кроме натурального числа, но не ноль: 1, 2, 3, 5 и т.д.  
valid_url Нет Возвращает FALSE если элемент формы содержит недопустимый URL.  
valid_email Нет Возвращает FALSE если элемент формы содержит недопустимый адрес электронной почты.  
valid_emails Нет Возвращает FALSE если любое значение в списке через запятую - недопустимый адрес электронной почты.  
valid_ip Нет Возвращает FALSE если предоставленный IP недопустимый. Принимает необязательный параметр ‘ipv4’ или ‘ipv6’ для определения IP формата.  
valid_base64 Нет Возвращает FALSE если полученная строка не содержит Base64 символы.  

Примечание

Эти правила могут также вызываться как дискретные методы. Например:

$this->form_validation->required($string);

Примечание

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

Настройки заготовок 

Ниже приведен список всех методов подготовки доступных для использования:

Имя Параметр Лрисание
prep_for_form Нет Преобразует специальные символы, так что HTML данные могут быть показаны в полях формы, не нарушая их.
prep_url Нет Добавляет “http://” к URLs если отстутствует.
strip_image_tags Нет Обрезает HTML изображений оставляя URL.
encode_php_tags Нет Преобразует PHP теги в субъекты.

Примечание

Вы можете также использовать любые встроенные функции PHP, что допускают один параметр trim(), htmlspecialchars(), urldecode(), etc.

Настройки класса 

class CI_Form_validation 
set_rules($field[, $label = ''[, $rules = '']]) 
Параметры:
  • $field (строка) – Имя поля
  • $label (строка) – Имя заголовка
  • $rules (смешанный) – Правила проверки, в виде строки разделенной вертикальной чертой “|”, или как массив или как правила
Возвращает:

CI_Form_validation экземпляр (метод цепочек)

Возвращаемый тип:

CI_Form_validation

Позволяет задать правила проверки, как описано в учебнике выше:

run([$group = '']) 
Параметры:
  • $group (строка) – Имя группы проверки для запуска
Возвращает:

TRUE при успехе, FALSE неудачной проверке

Возвращаемый тип:

булево

Выполняет операции на проверку. Возвращает TRUE при удаче и FALSE при неудаче. Вы можете опционально передать имя группы проверки через метод, подробнее описано в: сохранение набора правил валидации в файле конфигурации

set_message($lang[, $val = '']) 
Параметры:
  • $lang (строка) – Установка правила для языка
  • $val (строка) – Сообщение
Возвращает:

CI_Form_validation экземпляр (метод цепочек)

Возвращаемый тип:

CI_Form_validation

Позволяет задать пользовательские сообщения об ошибках. Смотрите настройка сообщений об ошибках

set_error_delimiters([$prefix = '<p>'[, $suffix = '</p>']]) 
Параметры:
  • $prefix (строка) – Префикс сообщения об ошибке
  • $suffix (строка) – Суффикс сообщения об ошибке
Возвращает:

CI_Form_validation экземпляр (метод цепочек)

Возвращаемый тип:

CI_Form_validation

Устанавливает значение по умолчанию префикса и суффикса для сообщения об ошибках.

set_data($data) 
Параметры:
  • $data (массив) – Массив данных проверки
Возвращает:

CI_Form_validation экземпляр (метод цепочек)

Возвращаемый тип:

CI_Form_validation

Позволяет задать массив для проверки, вместо использования по умолчанию $_POST массива.

reset_validation() 
Возвращает:CI_Form_validation экземпляр (метод цепочек)
Возвращаемый тип:CI_Form_validation

Позволяет сбросить валидацию при проверке более одного массива. Этот метод должен быть вызван перед проверкой каждого нового массива.

error_array() 
Возвращает:Массив сообщений об ошибках
Возвращаемый тип:массив

Возвращает сообщения об ошибках в виде массива.

error_string([$prefix = ''[, $suffix = '']]) 
Параметры:
  • $prefix (строка) – Префикс сообщения об ошибке
  • $suffix (строка) – Суффикс сообщения об ошибке
Возвращает:

Сообщения об ошибках в виде строки

Возвращаемый тип:

строка

Возвращает все сообщения об ошибках (как возвращается из error_array()) в формате строки и разделенной символом новой строки.

error($field[, $prefix = ''[, $suffix = '']]) 
Параметры:
  • $field (строка) – Имя поля
  • $prefix (строка) – Необязательный префикс
  • $suffix (строка) – Необязательный суффикс
Возвращает:

Строка сообщения об ошибке

Возвращаемый тип:

строка

Возвращает сообщение об ошибке для конкретного поля, при необходимости добавляя префикс и/или суффикс (обычно HTML тэги).

has_rule($field) 
Параметры:
  • $field (строка) – Имя поля
Возвращает:

TRUE если поле имеет набор правил, FALSE если нет

Возвращаемый тип:

булево

Проверяет, есть ли набор правил для указанного поля.

Настройки хелпера 

Пожалуйста, обратитесь к инструкции по хелперу форм для следующих функций:

Обратите внимание, что эти процедурные функции, поэтому они не требуют от вас объединения их с $this->form_validation.