Валидация форм
CodeIgniter предоставляет исчерпывающий класс валидации форм и подготовки данных, который помогает минимизировать количество кода, который вам нужно написать.
Содержание страницы
-
Валидация форм
- Обзор
-
Учебник по валидации форм
- Форма
- Страница успеха
- Контроллер
- Попробуйте!
- Объяснение
- Установка правил валидации
- Установка правил с использованием массива
- Каскадные правила
- Подготовка данных
- Повторное заполнение формы
- Обратные вызовы: ваши собственные методы валидации
- Вызываемый: используйте что угодно в качестве правила
- Установка сообщений об ошибках
- Перевод имен полей
- Изменение разделителей ошибок
- Отображение ошибок по отдельности
- Валидация массива (кроме $_POST)
- Сохранение наборов правил валидации в файле конфигурации
- Использование массивов в качестве имён полей
- Справочник по правилам
- Справочник по подготовке
- Справочник по классам
- Справочник по вспомогательным функциям
Обзор
Прежде чем объяснить подход CodeIgniter к валидации данных, давайте опишем идеальный сценарий:
- Отображается форма.
- Вы заполняете её и отправляете.
- Если вы отправили что-то некорректное или, возможно, пропустили обязательный элемент, форма отображается повторно, содержащая ваши данные вместе с сообщением об ошибке, описывающим проблему.
- Этот процесс продолжается до тех пор, пока вы не отправите корректную форму.
На стороне приёма сценарий должен:
- Проверять обязательность данных.
- Проверять, что данные имеют правильный тип и соответствуют правильным критериям. Например, если отправляется имя пользователя, оно должно быть валидировано, чтобы содержать только разрешённые символы. Оно должно иметь минимальную длину и не превышать максимальную длину. Имя пользователя не может совпадать с существующим именем пользователя другого человека или, возможно, даже быть зарезервированным словом. И т.д.
- Сантетизировать данные для безопасности.
- Предварительно форматировать данные, если необходимо (нужно ли обрезать данные? кодировать HTML? и т.д.)
- Подготовить данные для вставки в базу данных.
Хотя в вышеописанном процессе нет ничего слишком сложного, обычно он требует значительного объёма кода, и для отображения сообщений об ошибках обычно размещаются различные управляющие структуры внутри HTML-формы. Валидация форм, хотя и проста в создании, обычно очень запутанна и утомительна в реализации.
Учебник по валидации форм
В следующем примере рассматривается практический учебник по реализации валидации форм в CodeIgniter.
Для реализации валидации форм вам понадобятся три вещи:
- Файл представления, содержащий форму.
- Файл представления, содержащий сообщение «успеха», которое будет отображаться при успешной отправке.
- Метод контроллера для получения и обработки отправленных данных.
Давайте создадим эти три вещи, используя пример формы регистрации члена.
Форма
Используя текстовый редактор, создайте форму под названием myform.php. В неё поместите этот код и сохраните его в папке application/views/:
<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="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
</form>
</body>
</html>
Страница успеха
Используя текстовый редактор, создайте форму под названием formsuccess.php. В неё поместите этот код и сохраните её в папке application/views/:
<html>
<head>
<title>My Form</title>
</head>
<body>
<h3>Your form was successfully submitted!</h3>
<p><?php echo anchor('form', 'Try it again!'); ?></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');
}
}
}
Попробуйте!
Чтобы попробовать свою форму, перейдите на свой сайт, используя URL, подобный этому:
example.com/index.php/form/
Если вы отправите форму, вы просто увидите, как форма перезагрузится. Это потому, что вы ещё не настраивали никаких правил валидации.
Поскольку вы ещё не указали классу валидации форм, что валидировать, он по умолчанию возвращает FALSE (булево значение false). ``Метод run()`` возвращает TRUE только в том случае, если он успешно применил ваши правила без каких-либо сбоев.
Объяснение
Вы заметите несколько моментов в вышеперечисленных страницах:
Форма (myform.php) — стандартная веб-форма с несколькими исключениями:
- Она использует вспомогательную функцию для создания открытия формы. Технически это не обязательно. Вы можете создать форму с помощью стандартного HTML. Однако преимущество использования вспомогательной функции заключается в том, что она генерирует URL действия для вас на основе URL в файле конфигурации. Это делает ваше приложение более переносимым в случае изменения ваших URL.
-
Вверху формы вы увидите следующий вызов функции:
<?php echo validation_errors(); ?>
Эта функция вернёт любые сообщения об ошибках, отправленные валидатором. Если сообщений нет, она возвращает пустую строку.
Контроллер (Form.php) имеет один метод: index(). Этот метод инициализирует класс валидации, загружает вспомогательные функции формы и URL, используемые вашими файлами представления. Он также запускает процедуру валидации. В зависимости от того, была ли валидация успешной, он либо отображает форму, либо страницу успеха.
Установка правил валидации
CodeIgniter позволяет устанавливать любое количество правил валидации для данного поля, каскадируя их в порядке, и даже позволяет подготовить и предварительно обработать данные поля одновременно. Для установки правил валидации вы будете использовать метод set_rules().
$this->form_validation->set_rules();
Вышеуказанный метод принимает три параметра в качестве входных данных:
- Имя поля — точное имя, которое вы дали полю формы.
- «Человеческое» имя для этого поля, которое будет вставлено в сообщение об ошибке. Например, если ваше поле называется «пользователь», вы можете дать ему человеческое имя «Имя пользователя».
- Правила валидации для этого поля формы.
- (необязательно) Установите пользовательские сообщения об ошибках для любых правил, заданных для текущего поля. Если не заданы, будут использоваться значения по умолчанию.
Примечание
Если вы хотите, чтобы имя поля хранилось в файле языка, пожалуйста, см. Перевод имен полей.
Вот пример. В вашем контроллере (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]');
Приведённый выше код устанавливает следующие правила:
- Поле имени пользователя должно быть не короче 5 символов и не длиннее 12.
- Поле пароля должно совпадать с полем подтверждения пароля.
- Поле электронной почты должно содержать корректный адрес электронной почты.
Попробуйте! Отправьте свою форму без соответствующих данных, и вы увидите новые сообщения об ошибках, соответствующие вашим новым правилам. Доступно множество правил, о которых можно прочитать в справочнике по валидации.
Примечание
Вы также можете передать массив правил в 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>, радиокнопки и флажки.
Важно
Если вы используете массив в качестве имени поля формы, вы должны передать его в функцию как массив. Пример:
<input type="text" name="colors[]" value="<?php echo set_value('colors[]'); ?>" size="50" />
Дополнительную информацию см. в разделе Использование массивов в качестве имён полей ниже.
Обратные вызовы: ваши собственные методы валидации
Система валидации поддерживает обратные вызовы для ваших собственных методов валидации. Это позволяет расширить класс валидации в соответствии с вашими потребностями. Например, если вам нужно выполнить запрос к базе данных, чтобы проверить, выбирает ли пользователь уникальное имя пользователя, вы можете создать метод обратного вызова, который выполняет эту задачу. Давайте создадим пример этого.
В вашем контроллере измените правило «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» в качестве имени пользователя. Вы можете увидеть, что данные поля формы были переданы вашему методу обратного вызова для обработки.
Чтобы вызвать обратный вызов, просто поместите имя метода в правило, используя «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.
Это, конечно, всего лишь пример, и обратные вызовы не ограничиваются моделями. Вы можете использовать любой объект/метод, который принимает значение поля в качестве первого параметра. Вы также можете использовать анонимную функцию:
$this->form_validation->set_rules(
'username', 'Username',
array(
'required',
function($value)
{
// Check $value
}
)
);
Конечно, так как правило «Callable» само по себе не является строкой, оно также не является именем правила. Это проблема, когда вы хотите установить сообщения об ошибках для них. Чтобы обойти эту проблему, вы можете поместить такие правила как второй элемент массива, а первый элемент — это имя правила:
$this->form_validation->set_rules(
'username', 'Username',
array(
'required',
array('username_callable', array($this->users_model, 'valid_username'))
)
);
Вариант с анонимной функцией:
$this->form_validation->set_rules(
'username', 'Username',
array(
'required',
array(
'username_callable',
function($str)
{
// Check validity of $str and return TRUE or 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} must have at least {param} characters.');
Для поля с «человеческим» именем «Имя пользователя» и правилом min_length[5], будет отображено сообщение об ошибке: «Имя пользователя должно содержать не менее 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';
Примечание
Если вы сохранили элемент массива в файле языка, который не загружается автоматически, вам нужно будет помнить о его загрузке в контроллере, используя:
$this->lang->load('file_name');
См. страницу Класс языка для получения дополнительной информации о файлах языка.
Изменение разделителей ошибок
По умолчанию класс Form Validation добавляет тег абзаца (<p>) вокруг каждого сообщения об ошибке. Вы можете изменить эти разделители глобально, индивидуально или изменить значения по умолчанию в файле конфигурации.
-
Изменение разделителей глобально Для глобального изменения разделителей ошибок в методе контроллера, сразу после загрузки класса Form Validation, добавьте это:
$this->form_validation->set_error_delimiters('<div class="error">', '</div>');В этом примере мы переключились на использование тегов div.
-
Изменение разделителей индивидуально Каждый из двух функций генерирования ошибок, представленных в этом руководстве, может быть снабжён собственными разделителями следующим образом:
<?php echo form_error('field name', '<div class="error">', '</div>'); ?>Или:
<?php echo validation_errors('<div class="error">', '</div>'); ?> -
Установить разделители в файле конфигурации Вы можете добавить разделители ошибок в 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 заключается в том, что он позволяет хранить все правила валидации для всей вашей программы в файле конфигурации. Вы можете организовать эти правила в «группы». Эти группы могут загружаться автоматически при вызове соответствующего контроллера/метода, или вы можете вручную вызывать каждый набор по мере необходимости.
Как сохранить ваши правила
Чтобы сохранить правила валидации, просто создайте файл с именем 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.
Создание наборов правил
Для организации правил в «наборы» необходимо поместить их в «подмассивы». Рассмотрим следующий пример, в котором показаны два набора правил. Мы условно назвали эти два правила «регистрация» и «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(). Например, для вызова правила регистрации вы сделаете так:
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() из этого класса/метода.
Использование массивов в качестве имён полей
Класс Form Validation поддерживает использование массивов в качестве имён полей. Рассмотрим этот пример:
<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, если элемент формы не уникален для указанной таблицы и поля в параметре. Примечание: для работы этого правила необходимо включить Query Builder. | is_unique[table.field] |
| min_length | Да | Возвращает FALSE, если элемент формы короче значения параметра. | min_length[3] |
| max_length | Да | Возвращает FALSE, если элемент формы длиннее значения параметра. | 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, если элемент формы содержит символы, отличные от букв, цифр или пробелов. Следует использовать после trim для избежания пробелов в начале или конце. | |
| alpha_dash | Нет | Возвращает FALSE, если элемент формы содержит символы, отличные от букв, цифр, подчеркиваний или дефисов. | |
| numeric | Нет | Возвращает FALSE, если элемент формы содержит символы, отличные от цифр. | |
| integer | Нет | Возвращает FALSE, если элемент формы не является целым числом. | |
| decimal | Нет | Возвращает FALSE, если элемент формы не является десятичным числом. | |
| is_natural | Нет | Возвращает FALSE, если элемент формы не является натуральным числом (0, 1, 2, и т.д.). | |
| is_natural_no_zero | Нет | Возвращает FALSE, если элемент формы не является натуральным числом, отличным от нуля (1, 2, 3, и т.д.). | |
| valid_url | Нет | Возвращает FALSE, если элемент формы не является корректным URL. | |
| valid_email | Нет | Возвращает FALSE, если элемент формы не является корректным email адресом. | |
| valid_emails | Нет | Возвращает FALSE, если какое-либо значение в списке, разделённом запятыми, не является корректным email адресом. | |
| valid_ip | Да | Возвращает FALSE, если указанный IP адрес некорректен. Принимает необязательный параметр 'ipv4' или 'ipv6' для указания формата IP. | |
| valid_base64 | Нет | Возвращает FALSE, если предоставленная строка не содержит допустимых символов Base64. |
Примечание
Эти правила также могут вызываться как отдельные методы. Например:
$this->form_validation->required($string);
Примечание
Вы также можете использовать любые встроенные PHP функции, которые принимают до двух параметров, где, по крайней мере, один является обязательным (для передачи данных поля).
Справочник по подготовке данных
Ниже приведен список всех доступных методов подготовки данных:
| Имя | Параметр | Описание |
|---|---|---|
| prep_for_form | Нет | УСТАРЕЛО: Преобразует специальные символы, чтобы данные HTML могли быть показаны в поле формы без ошибок. |
| prep_url | Нет | Добавляет «http://» к URL, если они отсутствуют. |
| strip_image_tags | Нет | Удаляет HTML из тегов изображения, оставляя только URL. |
| encode_php_tags | Нет | Преобразует PHP теги в сущности. |
Примечание
Вы также можете использовать любые встроенные PHP функции, которые принимают один параметр, такие как trim(), htmlspecialchars(), urldecode(), и т.д.
Справочник по классам
-
class CI_Form_validation -
-
set_rules($field[, $label = ''[, $rules = ''[, $errors = array()]]]) -
Параметры: - $field (string) – Название поля
- $label (string) – Метка поля
- $rules (mixed) – Правила валидации, как список строк, разделённых символом «|», или как массив правил
- $errors (array) – Список пользовательских сообщений об ошибках
Возвращает: Экземпляр CI_Form_validation (метод цепочки вызовов)
Тип возвращаемого значения: CI_Form_validation
Разрешает задавать правила валидации, как описано в разделах руководства по этой теме:
-
run([$group = '']) -
Параметры: - $group (string) – Имя группы валидации для запуска
Возвращает: TRUE при успехе, FALSE при ошибке валидации
Тип возвращаемого значения: bool
Выполняет процедуры валидации. Возвращает boolean TRUE при успехе и FALSE при ошибке. Вы можете необязательно передать имя группы валидации через метод, как описано в: Сохранение наборов правил валидации в файле конфигурации
-
set_message($lang[, $val = '']) -
Параметры: - $lang (string) – Правило, для которого предназначено сообщение
- $val (string) – Сообщение
Возвращает: Экземпляр CI_Form_validation (метод цепочки вызовов)
Тип возвращаемого значения: CI_Form_validation
Разрешает задавать пользовательские сообщения об ошибках. См. Настройка сообщений об ошибках
-
set_error_delimiters([$prefix = '<p>'[, $suffix = '</p>']]) -
Параметры: - $prefix (string) – Префикс сообщения об ошибке
- $suffix (string) – Суффикс сообщения об ошибке
Возвращает: Экземпляр CI_Form_validation (метод цепочки вызовов)
Тип возвращаемого значения: CI_Form_validation
Устанавливает префикс и суффикс по умолчанию для сообщений об ошибках.
-
set_data($data) -
Параметры: - $data (array) – Массив данных для валидации
Возвращает: Экземпляр CI_Form_validation (метод цепочки вызовов)
Тип возвращаемого значения: CI_Form_validation
Разрешает установить массив для валидации вместо использования массива по умолчанию %%%CODE_BLOCK_80%%.
-
reset_validation() -
Возвращает: Экземпляр CI_Form_validation (метод цепочки вызовов) Тип возвращаемого значения: CI_Form_validation Разрешает сбросить валидацию при валидации более одного массива. Этот метод следует вызывать перед валидацией каждого нового массива.
-
error_array() -
Возвращает: Массив сообщений об ошибках Тип возвращаемого значения: array Возвращает сообщения об ошибках в виде массива.
-
error_string([$prefix = ''[, $suffix = '']]) -
Параметры: - $prefix (string) – Префикс сообщения об ошибке
- $suffix (string) – Суффикс сообщения об ошибке
Возвращает: Сообщения об ошибках в виде строки
Тип возвращаемого значения: string
Возвращает все сообщения об ошибках (как возвращаемые из error_array()) в формате строки, разделённые символом новой строки.
-
error($field[, $prefix = ''[, $suffix = '']]) -
Параметры: - $field (string) – Название поля
- $prefix (string) – Необязательный префикс
- $suffix (string) – Необязательный суффикс
Возвращает: Строка сообщения об ошибке
Тип возвращаемого значения: string
Возвращает сообщение об ошибке для определённого поля, необязательно добавляя к нему префикс и/или суффикс (обычно HTML-теги).
-
has_rule($field) -
Параметры: - $field (string) – Название поля
Возвращает: TRUE, если для поля установлены правила, FALSE — если нет
Тип возвращаемого значения: bool
Проверяет, установлены ли правила для указанного поля.
-
Справочник по вспомогательным функциям
Обратитесь к руководству Вспомогательных функций для форм для следующих функций:
Обратите внимание, что это процедурные функции, поэтому вам не нужно добавлять к ним префикс %%%CODE_BLOCK_92%%.
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/form_validation.html