FuelPHP - Валидация
Validation- одна из частых и наиболее повторяемых задач в веб-приложении. Пользователь вводит необходимые данные в форму и отправляет их. Затем веб-приложению необходимо проверить данные перед их обработкой. Например, пользователь вводит данные о сотруднике, и post_action необходимо проверить перед сохранением в базе данных. FuelPHP предоставляет для этой цели действительно простой класс Validation.
В FuelPHP концепция проверки очень проста и предоставляет различные методы через класс Validation для правильной проверки формы. Ниже приводится рабочий процесс проверки,
Step 1 - Создайте новый объект проверки, используя forge метод.
$val = Validation::forge();
Step 2 - Добавьте поля, которые необходимо проверить, используя метод добавления.
$val->add('name', 'Employee name');
Step 3 - Установите правила проверки для добавленных полей с помощью add_rule метод.
$val->add('name', 'Employee name')->add_rule('required');
$val->add('age', 'Employee age')->add_rule('required')
->add_rule('numeric_min', 20)
->add_rule('numeric_max', 30);
Step 4 - Вызов метода запуска для проверки данных.
// run validation on just post
if ($val->run()) {
// success
} else {
// falier
}
Step 5 - Используйте проверенные и ошибки, чтобы получить действительные и недопустимые поля соответственно.
$vars = $val->validated();
$vars = $val->error();
Правила
FuelPHP содержит множество правил для проверки, а также предоставляет возможность создавать новые правила. Класс Validation поддерживает следующие правила:
required - Вводимое значение
required_with- Установите другое поле в качестве сопутствующего поля. Если поле задано, необходимо указать и сопутствующие поля.
match_value - Установите значение, которое будет соответствовать значению поля
match_pattern - Установите значение, которое будет сопоставлено как регулярное выражение со значением поля
match_field - Установить значение другого поля как значение, которое будет соответствовать значению поля
match_collection - Установите значение, которое будет сопоставлено как коллекция со значением поля
min_length - Установить минимальную длину значения поля
max_length - Установить максимальную длину значения поля
exact_length - Установите точную длину значения поля
valid_date - Установите значение поля на действительную дату
valid_email - Установите в поле действительный адрес электронной почты.
valid_emails - Установите значение поля на действительные электронные письма, разделенные запятыми.
valid_url - Установите в качестве значения поля действительный URL
valid_ip - Установите значение поля на действительный IP
numeric_min - Установить минимальное значение значения поля
numeric_max - Установить максимальное значение значения поля
numeric_between - Установить минимальное и максимальное значение значения поля
valid_string - Подобно регулярному выражению, но проще
$val->add('username', 'User name')->add_rule('valid_string', array('alpha, dots');
Здесь альфа относится к алфавитным символам, а точки - к (.). Допустимая строка - это только строка, содержащая буквы алфавита и (.). Другие варианты: прописные, строчные, специальные, числовые, пробелы и т. Д.
Рабочий пример
Мы можем обновить функцию добавления сотрудников, чтобы включить проверку. Просто обновитеpost_add метод сотрудника контроллера следующим образом.
public function post_add() {
$val = Validation::forge();
$val->add('name', 'Employee name')->add_rule('required');
$val->add('age', 'Employee age')->add_rule('required')
->add_rule('numeric_min', 20)
->add_rule('numeric_max', 30);
if ($val->run()) {
$name = Input::post('name');
$age = Input::post('age');
$model = new model_employee();
$model->name = $name;
$model->age = $age;
$model->save();
Response::redirect('employee/list');
} else {
Response::redirect('employee/add');
}
}
Здесь мы указали nameи возраст в качестве обязательных полей. Вageдолжно быть от 20 до 30. Если действуют оба правила, данные о сотрудниках будут сохранены и перенаправлены на страницу со списком сотрудников. В противном случае данные о сотруднике будут отклонены и перенаправлены на страницу добавления сотрудника.