Валидация
CodeIgniter предоставляет комплексный класс валидации данных, который помогает минимизировать объем кода, который вам нужно написать.
- Обзор
- Руководство по валидации форм
- Загрузка библиотеки
- Установка правил валидации
- Работа с валидацией
- Работа с ошибками
- Настройка отображения ошибок
- Создание пользовательских правил
- Доступные правила
Обзор
Прежде чем объяснить подход CodeIgniter к валидации данных, давайте опишем идеальный сценарий:
- Отображается форма.
- Вы заполняете ее и отправляете.
- Если вы отправили что-то некорректное или, возможно, пропустили обязательный элемент, форма повторно отображается с вашими данными и сообщением об ошибке, описывающим проблему.
- Этот процесс продолжается до тех пор, пока вы не отправите корректную форму.
На стороне приема скрипт должен:
- Проверить наличие обязательных данных.
- Проверить, что данные имеют правильный тип и соответствуют правильным критериям. Например, если отправляется имя пользователя, оно должно быть валидировано для содержания только разрешенных символов. Оно должно быть минимальной длины и не превышать максимальной длины. Имя пользователя не может совпадать с существующим именем пользователя другого человека или, возможно, являться зарезервированным словом. И т. д.
- Очистить данные для безопасности.
- Предварительно отформатировать данные, если необходимо.
- Подготовить данные для вставки в базу данных.
Хотя в указанном процессе нет ничего сложног, он обычно требует значительного количества кода, и для отображения сообщений об ошибках обычно размещаются различные управляющие конструкции внутри HTML-формы. Валидация форм, хотя и проста в создании, как правило, очень запутанна и утомительна при реализации.
Руководство по валидации форм
В том, что следует далее, приводится практическое руководство по реализации валидации форм CodeIgniter.
Для реализации валидации форм вам потребуются три вещи:
- Файл представления (Представление), содержащий форму.
- Файл представления, содержащий сообщение «успеха» для отображения при успешной отправке.
- Метод контроллера (контроллер), принимающий и обрабатывающий отправленные данные.
Давайте создадим эти три вещи, используя в качестве примера форму регистрации нового пользователя.
Форма
Используя текстовый редактор, создайте форму под названием Signup.php. В ней поместите этот код и сохраните его в папке app/Views/:
<html>
<head>
<title>My Form</title>
</head>
<body>
<?= $validation->listErrors() ?>
<?= 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>
Страница успеха
Используя текстовый редактор, создайте форму под названием Success.php. В ней поместите этот код и сохраните его в папке app/Views/:
<html>
<head>
<title>My Form</title>
</head>
<body>
<h3>Your form was successfully submitted!</h3>
<p><?= anchor('form', 'Try it again!') ?></p>
</body>
</html>
Контроллер
Используя текстовый редактор, создайте контроллер под названием Form.php. В нем поместите этот код и сохраните его в папке app/Controllers/:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class Form extends Controller
{
public function index()
{
helper(['form', 'url']);
if (! $this->validate([])) {
echo view('Signup', [
'validation' => $this->validator,
]);
} else {
echo view('Success');
}
}
}
Попробуйте!
Чтобы попробовать вашу форму, перейдите на ваш сайт, используя URL, подобный этому:
example.com/index.php/form/
Если вы отправите форму, вы просто увидите, как форма перезагрузится. Это потому, что вы еще не настроили правил валидации в $this->validate().
Метод validate() является методом в контроллере. Он использует класс Validation внутри. См. Валидация данных в Контроллеры.
Примечание
Поскольку вы еще не сказали методу validate() валидировать что-либо, он по умолчанию возвращает false (булевое значение false). Метод validate() возвращает true только в том случае, если он успешно применил ваши правила без их нарушения.
Объяснение
Вы заметите несколько вещей в вышеприведенных страницах:
Форма (Signup.php) является стандартной веб-формой с несколькими исключениями:
- Она использует помощник форм для создания открытия формы. Технически это не обязательно. Вы могли бы создать форму с помощью стандартного HTML. Однако преимущество использования помощника заключается в том, что он генерирует URL действия для вас, на основе URL в вашем файле конфигурации. Это делает ваш приложение более переносимым в случае изменения URL.
-
В верхней части формы вы заметите следующий вызов функции:
<?= $validation->listErrors() ?>
Эта функция вернет любые сообщения об ошибках, отправленные валидатором. Если сообщений нет, она возвращает пустую строку.
Контроллер (Form.php) имеет один метод: index(). Этот метод использует метод validate(), предоставленный контроллером, и загружает помощник форм и помощник URL, используемые вашими файлами представлений. Он также запускает процедуру валидации. В зависимости от того, была ли валидация успешной, он либо отображает форму, либо страницу успеха.
Добавление правил валидации
Затем добавьте правила валидации в контроллере (Form.php):
if (! $this->validate([
'username' => 'required',
'password' => 'required|min_length[10]',
'passconf' => 'required|matches[password]',
'email' => 'required|valid_email',
])) {
...
}
Если вы отправите форму, вы должны увидеть страницу успеха или форму с сообщениями об ошибках.
Загрузка библиотеки
Библиотека загружается как служба с именем validation:
$validation = \Config\Services::validation();
Это автоматически загружает файл Config\Validation, который содержит настройки для включения нескольких наборов правил и наборов правил, которые можно легко повторно использовать.
Примечание
Вам может никогда не потребоваться использовать этот метод, поскольку как контроллер (Контроллер), так и модель (Модель) предоставляют методы, которые делают валидацию еще проще.
Установка правил валидации
CodeIgniter позволяет вам устанавливать любое количество правил валидации для данного поля, каскадно их в порядке.
Для установки правил валидации вы будете использовать методы setRule(), setRules(), или withRequest().
setRule()
Этот метод устанавливает одно правило. Он принимает имя поля в качестве первого параметра, необязательную метку и строку с разделителями «|» списком правил, которые должны применяться:
$validation->setRule('username', 'Username', 'required');
Имя поля должно совпадать с ключом любого массива данных, который отправляется. Если данные берутся непосредственно из $_POST, то оно должно точно совпадать с именем элемента формы.
setRules()
Подобно методу setRule(), но принимает массив имен полей и их правил:
$validation->setRules([
'username' => 'required',
'password' => 'required|min_length[10]',
]);
Для предоставления помеченного сообщения об ошибке вы можете настроить:
$validation->setRules([
'username' => ['label' => 'Username', 'rules' => 'required'],
'password' => ['label' => 'Password', 'rules' => 'required|min_length[10]'],
]);
withRequest()
Один из самых распространенных случаев, когда вы будете использовать библиотеку валидации, — это валидация данных, введенных из HTTP-запроса. При необходимости вы можете передать экземпляр текущего объекта Request, и он возьмет все входные данные и установит их в качестве данных для валидации:
$validation->withRequest($this->request)->run();
Работа с валидацией
Валидация ключей, которые являются массивами
Если ваши данные находятся в вложенном ассоциативном массиве, вы можете использовать «синтаксис массивов с точкой», чтобы легко валидировать ваши данные:
// The data to test:
'contacts' => [
'name' => 'Joe Smith',
'friends' => [
[
'name' => 'Fred Flinstone',
],
[
'name' => 'Wilma',
],
]
]
// Joe Smith
$validation->setRules([
'contacts.name' => 'required',
]);
// Fred Flintsone & Wilma
$validation->setRules([
'contacts.friends.name' => 'required',
]);
Вы можете использовать символ «*» для соответствия любому уровню массива:
// Fred Flintsone & Wilma
$validation->setRules([
'contacts.*.name' => 'required',
]);
«Синтаксис массивов с точкой» также может быть полезен, когда у вас есть данные массива с одним измерением. Например, данные, возвращаемые многострочным выпадающим списком:
// The data to test:
'user_ids' => [
1,
2,
3,
]
// Rule
$validation->setRules([
'user_ids.*' => 'required',
]);
Валидация одного значения
Валидировать одно значение по правилу:
$validation->check($value, 'required');
Сохранение наборов правил валидации в файле конфигурации
Прекрасной особенностью класса Validation является то, что он позволяет хранить все правила валидации для всего приложения в файле конфигурации. Правила организуются в «группы». Вы можете указать другую группу каждый раз при запуске валидации.
Как сохранить свои правила
Для хранения правил валидации просто создайте новую публичную переменную в классе Config\Validation с именем вашей группы. Этот элемент будет содержать массив с вашими правилами валидации. Как показано ранее, массив валидации будет иметь такой прототип:
class Validation
{
public $signup = [
'username' => 'required',
'password' => 'required',
'pass_confirm' => 'required|matches[password]',
'email' => 'required|valid_email',
];
}
Вы можете указать используемую группу при вызове метода run().
$validation->run($data, 'signup');
Вы также можете хранить пользовательские сообщения об ошибках в этом файле конфигурации, присвоив свойству то же имя, что и группе, и добавив _errors. Эти сообщения будут автоматически использоваться для любых ошибок при использовании этой группы:
class Validation
{
public $signup = [
'username' => 'required',
'password' => 'required',
'pass_confirm' => 'required|matches[password]',
'email' => 'required|valid_email',
];
public $signup_errors = [
'username' => [
'required' => 'You must choose a username.',
],
'email' => [
'valid_email' => 'Please check the Email field. It does not appear to be valid.',
],
];
}
Или передайте все настройки в массиве:
class Validation
{
public $signup = [
'username' => [
'rules' => 'required',
'errors' => [
'required' => 'You must choose a Username.',
],
],
'email' => [
'rules' => 'required|valid_email',
'errors' => [
'valid_email' => 'Please check the Email field. It does not appear to be valid.',
],
],
];
}
Подробную информацию о формате массива см. ниже.
Получение и установка групп правил
Получение группы правил
Этот метод получает группу правил из конфигурации валидации:
$validation->getRuleGroup('signup');
Установка группы правил
Этот метод устанавливает группу правил из конфигурации валидации в службу валидации:
$validation->setRuleGroup('signup');
Запуск нескольких валидаций
Примечание
Метод run() не будет сбрасывать состояние ошибки. Если предыдущий запуск завершился неудачей, run() всегда вернёт false, а getErrors() вернёт все предыдущие ошибки до явного сброса.
Если вы планируете выполнить несколько валидаций, например, на различных наборах данных или с различными правилами последовательно, вам может потребоваться вызывать $validation->reset() перед каждым запуском, чтобы избавиться от ошибок предыдущего запуска. Имейте в виду, что reset() аннулирует все ранее заданные данные, правила или пользовательские сообщения об ошибках, поэтому setRules(), setRuleGroup() и т. д. необходимо повторять:
foreach ($userAccounts as $user) {
$validation->reset();
$validation->setRules($userAccountRules);
if (! $validation->run($user)) {
// handle validation errors
}
}
Плейсхолдеры валидации
Класс Validation предоставляет простой метод для замены частей ваших правил на основе данных, передаваемых в него. Это звучит довольно неясно, но может быть особенно полезно с правилом валидации is_unique. Плейсхолдеры — это просто имя поля (или ключа массива), переданное как $data в фигурных скобках. Он будет заменён **значением** соответствующего входящего поля. Пример прояснит это:
$validation->setRules([
'email' => 'required|valid_email|is_unique[users.email,id,{id}]',
]);
В этом наборе правил указано, что адрес электронной почты должен быть уникальным в базе данных, за исключением строки, имеющей идентификатор, соответствующий значению плейсхолдера. Предположим, что данные POST-формы содержат следующее:
$_POST = [
'id' => 4,
'email' => 'foo@example.com',
];
Тогда плейсхолдер {id} будет заменён числом **4**, что даст пересмотренное правило:
$validation->setRules([
'email' => 'required|valid_email|is_unique[users.email,id,4]',
]);
Таким образом, при проверке уникальности адреса электронной почты будет пропущена строка в базе данных, имеющая значение id=4.
Это также можно использовать для создания более динамичных правил во время выполнения, если вы позаботитесь о том, чтобы любые передаваемые динамические ключи не вступали в конфликт с вашими данными формы.
Работа с ошибками
Библиотека Validation предоставляет несколько методов, которые помогут вам устанавливать сообщения об ошибках, предоставлять пользовательские сообщения об ошибках и извлекать одну или несколько ошибок для отображения.
По умолчанию сообщения об ошибках выводятся из языковых строк в system/Language/en/Validation.php, где каждое правило имеет запись.
Установка пользовательских сообщений об ошибках
Методы setRule() и setRules() могут принимать массив пользовательских сообщений, которые будут использоваться как ошибки, специфичные для каждого поля, в качестве последнего параметра. Это позволяет пользователю получить приятный опыт, так как ошибки адаптированы к каждому случаю. Если пользовательское сообщение об ошибке не предоставлено, используется значение по умолчанию.
Вот два способа предоставления пользовательских сообщений об ошибках.
В качестве последнего параметра:
$validation->setRules([
'username' => 'required|is_unique[users.username]',
'password' => 'required|min_length[10]'
],
[ // Errors
'username' => [
'required' => 'All accounts must have usernames provided',
],
'password' => [
'min_length' => 'Your password is too short. You want to get hacked?',
],
]
);
Или в стиле с метками:
$validation->setRules([
'username' => [
'label' => 'Username',
'rules' => 'required|is_unique[users.username]',
'errors' => [
'required' => 'All accounts must have {field} provided',
],
],
'password' => [
'label' => 'Password',
'rules' => 'required|min_length[10]',
'errors' => [
'min_length' => 'Your {field} is too short. You want to get hacked?',
],
]
]
);
Если вы хотите включить «человеческое» имя поля, или необязательный параметр, который позволяют некоторые правила (например, max_length), или значение, которое было проверено, вы можете добавить теги {field}, {param} и {value} в ваше сообщение соответственно:
'min_length' => 'Supplied value ({value}) for {field} must have at least {param} characters.'
Для поля с именем «Имя пользователя» и правилом min_length[6] со значением «Пицца» сообщение об ошибке будет выглядеть так: «Указанное значение (Пицца) для Имени пользователя должно содержать не менее 6 символов».
Примечание
Если вы передаёте последний параметр, сообщения об ошибках в стиле с метками будут проигнорированы.
Перевод сообщений и меток валидации
Для использования переведённых строк из файлов языка мы можем просто использовать синтаксис точки. Предположим, что у нас есть файл с переводами по адресу app/Languages/en/Rules.php. Мы можем просто использовать языковые строки, определённые в этом файле, например так:
$validation->setRules([
'username' => [
'label' => 'Rules.username',
'rules' => 'required|is_unique[users.username]',
'errors' => [
'required' => 'Rules.username.required',
],
],
'password' => [
'label' => 'Rules.password',
'rules' => 'required|min_length[10]',
'errors' => [
'min_length' => 'Rules.password.min_length',
],
],
]
);
Получение всех ошибок
Если вам нужно получить все сообщения об ошибках для невалидных полей, вы можете использовать метод getErrors():
$errors = $validation->getErrors();
// Returns:
[
'field1' => 'error message',
'field2' => 'error message',
]
Если ошибок нет, возвращается пустой массив.
Получение одной ошибки
Вы можете получить сообщение об ошибке для одного поля с помощью метода getError(). Единственным параметром является имя поля:
$error = $validation->getError('username');
Если ошибка отсутствует, возвращается пустая строка.
Проверка наличия ошибки
Вы можете проверить наличие ошибки с помощью метода hasError(). Единственным параметром является имя поля:
if ($validation->hasError('username')) {
echo $validation->getError('username');
}
Настройка отображения ошибок
При вызове $validation->listErrors() или $validation->showError() в фоновом режиме загружается файл представления, который определяет, как отображаются ошибки. По умолчанию они отображаются с классом errors на обертывающем div. Вы можете легко создавать новые представления и использовать их в своём приложении.
Создание представлений
Первый шаг — создание пользовательских представлений. Их можно разместить в любом месте, где метод view() может их найти, то есть в стандартной папке представлений или в любой папке представлений с именованием по пространствам имён. Например, вы можете создать новое представление в /app/Views/_errors_list.php:
<div class="alert alert-danger" role="alert">
<ul>
<?php foreach ($errors as $error) : ?>
<li><?= esc($error) ?></li>
<?php endforeach ?>
</ul>
</div>
В представлении доступен массив с именем $errors, содержащий список ошибок, где ключ — имя поля с ошибкой, а значение — сообщение об ошибке, например так:
$errors = [
'username' => 'The username field must be unique.',
'email' => 'You must provide a valid email address.'
];
На самом деле существует два типа представлений, которые вы можете создать. Первый содержит массив всех ошибок, и это то, что мы только что рассмотрели. Другой тип проще и содержит только одну переменную $error, которая содержит сообщение об ошибке. Она используется с методом showError(), где необходимо указать поле.
<span class="help-block"><?= esc($error) ?></span>
Конфигурация
После создания представлений вам необходимо сообщить библиотеке Validation об их существовании. Откройте Config/Validation.php. Внутри вы найдёте свойство $templates, где вы можете перечислить столько пользовательских представлений, сколько хотите, и предоставить для них короткий псевдоним.
public $templates = [
'list' => 'CodeIgniter\Validation\Views\list',
'single' => 'CodeIgniter\Validation\Views\single',
'my_list' => '_errors_list',
];
Указание шаблона
Вы можете указать используемый шаблон, передав его псевдоним в качестве первого параметра в listErrors:
<?= $validation->listErrors('my_list') ?>
При отображении ошибок, относящихся к конкретному полю, вы можете передать псевдоним в качестве второго параметра метода showError, сразу после имени поля, к которому относится ошибка:
<?= $validation->showError('username', 'my_single') ?>
Создание пользовательских правил
Правила хранятся в простых классах с именованием по пространствам имён. Их можно хранить в любом месте, если автозагрузчик может их найти. Эти файлы называются RuleSets. Чтобы добавить новый RuleSet, отредактируйте Config/Validation.php и добавьте новый файл в массив $ruleSets:
use CodeIgniter\Validation\CreditCardRules;
use CodeIgniter\Validation\FileRules;
use CodeIgniter\Validation\FormatRules;
use CodeIgniter\Validation\Rules;
public $ruleSets = [
Rules::class,
FormatRules::class,
FileRules::class,
CreditCardRules::class,
];
Вы можете добавить его как простую строку с полным именем класса или с использованием суффикса ::class, как показано выше. Главное преимущество здесь заключается в том, что это обеспечивает дополнительные возможности навигации в более продвинутых IDE.
Внутри самого файла каждый метод является правилом и должен принимать строку в качестве первого параметра и должен возвращать булево значение true или false, указывающее на то, пройдена ли проверка или нет:
class MyRules
{
public function even(string $str): bool
{
return (int) $str % 2 == 0;
}
}
По умолчанию система будет искать языковые строки, используемые в сообщениях об ошибках, в CodeIgniter\Language\en\Validation.php. В пользовательских правилах вы можете предоставить сообщения об ошибках, приняв переменную $error по ссылке во втором параметре:
public function even(string $str, string &$error = null): bool
{
if ((int) $str % 2 !== 0) {
$error = lang('myerrors.evenError');
return false;
}
return true;
}
Ваше новое пользовательское правило теперь можно использовать так же, как и любое другое правило:
$this->validate($request, [
'foo' => 'required|even',
]);
Разрешение параметров
Если ваш метод нуждается в работе с параметрами, функция должна принимать как минимум три параметра: строку для валидации, строку параметра и массив со всеми данными, отправленными из формы. Массив $data особенно полезен для правил, таких как require_with, которые должны проверять значение другого отправленного поля, чтобы на нём основывать результат:
public function required_with($str, string $fields, array $data): bool
{
$fields = explode(',', $fields);
// If the field is present we can safely assume that
// the field is here, no matter whether the corresponding
// search field is present or not.
$present = $this->required($str ?? '');
if ($present) {
return true;
}
// Still here? Then we fail this test if
// any of the fields are present in $data
// as $fields is the lis
$requiredFields = [];
foreach ($fields as $field) {
if (array_key_exists($field, $data)) {
$requiredFields[] = $field;
}
}
// Remove any keys with empty values since, that means they
// weren't truly there, as far as this is concerned.
$requiredFields = array_filter($requiredFields, function ($item) use ($data) {
return ! empty($data[$item]);
});
return empty($requiredFields);
}
Пользовательские сообщения об ошибках могут возвращаться в четвёртом параметре, как описано выше.
Доступные правила
Ниже приведён список всех доступных встроенных правил:
Примечание
Правило — строка; между параметрами, особенно правилом is_unique, не должно быть пробелов. Не должно быть пробелов перед и после ignore_value.
// is_unique[table.field,ignore_field,ignore_value]
$validation->setRules([
'name' => "is_unique[supplier.name,uuid, $uuid]", // is not ok
'name' => "is_unique[supplier.name,uuid,$uuid ]", // is not ok
'name' => "is_unique[supplier.name,uuid,$uuid]", // is ok
'name' => "is_unique[supplier.name,uuid,{uuid}]", // is ok - see "Validation Placeholders"
]);
| Правило | Параметр | Описание | Пример |
|---|---|---|---|
| alpha | Нет | Не проходит, если поле содержит символы, отличные от букв. | |
| alpha_space | Нет | Не проходит, если поле содержит символы, отличные от букв или пробелов. | |
| alpha_dash | Нет | Не проходит, если поле содержит символы, отличные от букв, цифр, нижних подчеркиваний или дефисов. | |
| alpha_numeric | Нет | Не проходит, если поле содержит символы, отличные от букв и цифр. | |
| alpha_numeric_space | Нет | Не проходит, если поле содержит символы, отличные от букв, цифр или пробелов. | |
| alpha_numeric_punct | Нет | Не проходит, если поле содержит символы, отличные от букв, цифр, пробелов или этого ограниченного набора знаков препинания: ~ (тильда), ! (восклицательный знак), # (номер), $ (доллар), % (процент), & (амперсанд), * (звездочка), - (дефис), _ (нижнее подчеркивание), + (плюс), = (равно), | (вертикальная черта), : (двоеточие), . (точка). | |
| decimal | Нет | Не проходит, если поле содержит символы, отличные от десятичного числа. Также допускает знак + или - перед числом. | |
| differs | Да | Не проходит, если поле не отличается от поля в параметре. | differs[имя_поля] |
| exact_length | Да | Не проходит, если длина поля не равна значению параметра. Одно или несколько значений, разделенных запятыми. | exact_length[5] или exact_length[5,8,12] |
| greater_than | Да | Не проходит, если поле меньше или равно значению параметра или не является числом. | greater_than[8] |
| greater_than_equal_to | Да | Не проходит, если поле меньше значения параметра или не является числом. | greater_than_equal_to[5] |
| hex | Нет | Не проходит, если поле содержит символы, отличные от шестнадцатеричных. | |
| if_exist | Нет | Если это правило присутствует, валидация вернет возможные ошибки только если ключ поля существует, независимо от его значения. | |
| in_list | Да | Не проходит, если поле не входит в предопределенный список. | in_list[красный,синий,зеленый] |
| integer | Нет | Не проходит, если поле содержит символы, отличные от целого числа. | |
| is_natural | Нет | Не проходит, если поле содержит символы, отличные от натурального числа: 0, 1, 2, 3 и т. д. | |
| is_natural_no_zero | Нет | Не проходит, если поле содержит символы, отличные от натурального числа, кроме нуля: 1, 2, 3 и т. д. | |
| is_not_unique | Да | Проверяет в базе данных, существует ли данное значение. Может игнорировать записи по полю/значению для фильтрации (в настоящее время поддерживается только один фильтр). | is_not_unique[таблица.поле,поле_фильтра,значение_фильтра] |
| is_unique | Да | Проверяет, существует ли это значение поля в базе данных. Можно указать столбец и значение для игнорирования, что полезно при обновлении записей, чтобы игнорировать саму запись. | is_unique[таблица.поле,поле_для_игнорирования,значение_для_игнорирования] |
| less_than | Да | Не проходит, если поле больше или равно значению параметра или не является числом. | less_than[8] |
| less_than_equal_to | Да | Не проходит, если поле больше значения параметра или не является числом. | less_than_equal_to[8] |
| matches | Да | Значение должно совпадать со значением поля в параметре. | matches[поле] |
| max_length | Да | Не проходит, если поле длиннее, чем значение параметра. | max_length[8] |
| min_length | Да | Не проходит, если поле короче, чем значение параметра. | min_length[3] |
| not_in_list | Да | Не проходит, если поле входит в предопределенный список. | not_in_list[красный,синий,зеленый] |
| numeric | Нет | Не проходит, если поле содержит символы, отличные от цифр. | |
| regex_match | Да | Не проходит, если поле не соответствует регулярному выражению. | regex_match[/regex/] |
| permit_empty | Нет | Разрешает полю принимать пустой массив, пустую строку, null или false. | |
| required | Нет | Не проходит, если поле является пустым массивом, пустой строкой, null или false. | |
| required_with | Да | Поле обязательно, когда любое из других необходимых полей присутствует в данных. | required_with[поле1,поле2] |
| required_without | Да | Поле обязательно, когда все другие поля присутствуют в данных, но не являются обязательными. | required_without[поле1,поле2] |
| string | Нет | Общий альтернативный вариант правил alpha*, подтверждающий, что элемент является строкой. | |
| timezone | Нет | Не проходит, если поле не соответствует часовому поясу согласно timezone_identifiers_list | |
| valid_base64 | Нет | Не проходит, если поле содержит символы, отличные от допустимых символов Base64. | |
| valid_json | Нет | Не проходит, если поле не содержит допустимую JSON-строку. | |
| valid_email | Нет | Не проходит, если поле не содержит допустимый адрес электронной почты. | |
| valid_emails | Нет | Не проходит, если какое-либо значение, указанное в списке, разделенном запятыми, не является допустимым адресом электронной почты. | |
| valid_ip | Нет | Не проходит, если предоставленный IP-адрес не является допустимым. Допускает необязательный параметр «ipv4» или «ipv6» для указания формата IP-адреса. | valid_ip[ipv6] |
| valid_url | Нет | Не проходит, если поле не содержит (в широком смысле) URL-адрес. Включает простые строки, которые могут быть именами хостов, например, «codeigniter». | |
| valid_url_strict | Да | Не проходит, если поле не содержит допустимый URL-адрес. Можно необязательно указать список допустимых схем. Если не указано, http,https являются допустимыми. Это правило использует PHP FILTER_VALIDATE_URL. | valid_url_strict[https] |
| valid_date | Нет | Не проходит, если поле не содержит допустимую дату. Допускает необязательный параметр для соответствия формату даты. | valid_date[д/м/гггг] |
| valid_cc_number | Да | Проверяет, соответствует ли номер кредитной карты формату, используемому указанным провайдером. В настоящее время поддерживаются следующие провайдеры: American Express (amex), China Unionpay (unionpay), Diners Club CarteBlance (carteblanche), Diners Club (dinersclub), Discover Card (discover), Interpayment (interpayment), JCB (jcb), Maestro (maestro), Dankort (dankort), NSPK MIR (mir), Troy (troy), MasterCard (mastercard), Visa (visa), UATP (uatp), Verve (verve), CIBC Convenience Card (cibc), Royal Bank of Canada Client Card (rbc), TD Canada Trust Access Card (tdtrust), Scotiabank Scotia Card (scotia), BMO ABM Card (bmoabm), HSBC Canada Card (hsbc) | valid_cc_number[amex] |
Правила для загрузки файлов
Эти правила валидации позволяют выполнять базовые проверки, необходимые для подтверждения соответствия загружаемых файлов потребностям вашего бизнеса. Поскольку значение поля загрузки файлов HTML не существует и хранится в глобальной переменной $_FILES, имя поля ввода необходимо использовать дважды. Один раз для указания имени поля, как и для любого другого правила, но снова в качестве первого параметра всех правил, относящихся к загрузке файлов:
// In the HTML
<input type="file" name="avatar">
// In the controller
$this->validate([
'avatar' => 'uploaded[avatar]|max_size[avatar,1024]',
]);
| Правило | Параметр | Описание | Пример |
|---|---|---|---|
| uploaded | Да | Не проходит, если имя параметра не соответствует имени какого-либо загруженного файла. | uploaded[имя_поля] |
| max_size | Да | Не проходит, если загруженный файл, указанный в параметре, больше, чем второе значение параметра в килобайтах (кБ). Или если файл больше, чем разрешенная максимальная размер, объявленная в файле конфигурации php.ini - upload_max_filesize директива. | max_size[имя_поля,2048] |
| max_dims | Да | Не проходит, если максимальная ширина и высота загруженного изображения превышают заданные значения. Первый параметр - имя поля. Второй - ширина, третий - высота. Также не пройдет, если файл не может быть определен как изображение. | max_dims[имя_поля,300,150] |
| mime_in | Да | Не проходит, если тип MIME файла не указан в параметрах. | mime_in[имя_поля,image/png,image/jpg] |
| ext_in | Да | Не проходит, если расширение файла не указано в параметрах. | ext_in[имя_поля,png,jpg,gif] |
| is_image | Да | Не проходит, если файл не может быть определен как изображение на основе типа MIME. | is_image[имя_поля] |
Правила валидации файлов применимы как для однократной, так и для многократной загрузки файлов.
Примечание
Вы также можете использовать любые встроенные функции PHP, которые возвращают булево значение и допускают как минимум один параметр - данные поля для проверки. Библиотека валидации никогда не изменяет данные для проверки.
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/libraries/validation.html