Что такое Yaml Form Generator
Описание возможностей и примеры использования
Одна страница
Распечатать
. Редактировалось 1 раз, последний — #1
YAML Form Generator — это класс на PHP, предназначенный для того, чтобы упростить создание и обработку форм для ввода данных и избавить разработчика от большинства рутинных действий. При его использовании вместо большого объема кода на HTML, PHP и JavaScript Web-разработчику достаточно написать лишь краткое описание формы на YAML, которое содержит названия полей, их типа, описания, и правил для валидации. YAML Form Generator распространяется по лицензии MIT.
Скачать YAML Form Generator (24 Kb)
Как это работает?
Работа YAML Form Generator состоит из двух этапов. Первый — генерация HTML-кода формы (метод form_generate) на основе описания ее полей в YAML-файле и заполнение ее исходными данными (или значениями по умолчанию), которые передаются методу в хеш-массиве, где ключами являются имена полей, а значениями — сами данные. Вместе с формой также генерируется код на JavaScript, необходимый для проверки данных на стороне клиента. Второй (метод form_validate) — вызывается при получении скриптов данных из сгенерированной формы. В нем происходит валидация данных формы, то есть проверка допустимости значений, их преобразование (для дат, checkbox, числовых данных) в удобный для сохранения в базу данных вид, проверка и сохранение загруженных файлов. Пример описания формы и кода ее обработки см. ниже.
Основные возможности:
Скачать YAML Form Generator (24 Kb)
Как это работает?
Работа YAML Form Generator состоит из двух этапов. Первый — генерация HTML-кода формы (метод form_generate) на основе описания ее полей в YAML-файле и заполнение ее исходными данными (или значениями по умолчанию), которые передаются методу в хеш-массиве, где ключами являются имена полей, а значениями — сами данные. Вместе с формой также генерируется код на JavaScript, необходимый для проверки данных на стороне клиента. Второй (метод form_validate) — вызывается при получении скриптов данных из сгенерированной формы. В нем происходит валидация данных формы, то есть проверка допустимости значений, их преобразование (для дат, checkbox, числовых данных) в удобный для сохранения в базу данных вид, проверка и сохранение загруженных файлов. Пример описания формы и кода ее обработки см. ниже.
Основные возможности:
- автоматическое заполнение формы исходными данными или значениями по умолчанию, выставление выбранными нужных значений в полях типа select или radiobutton;
- поддержка массивов исходных данных со сложной структурой любой вложенности (например, если описать поле user[settings][hidden], то исходные данные из него будут взяты из $data['user']['settings']['hidden']);
- автоматическая генерация наборов значений для select или radiobutton на основе массивов вида array('значение_поля1'=>'Описание поля 1','значение_поля2'=>'Описание поля 2'), что полезно, когда набор значений для select также берется из базы данных;
- преобразование данных, полученных из полей DATETIME или TIMESTAMP в привычное представление даты при генерации формы и обратно при ее валидации;
- обработка checkbox на этапе валидации: для снятых checkbox в соответствующие поля будет проставлено значение false;
- сохранение загруженных файлов (при этом разработчк должен указать callback-функцию, которая вернет путь, куда сохранять файл, и значение, которое нужно поместить в массив с результатов);
- проверка графических файлов на корректность формата (требует модуля GD) и допустимые размеры в пикселях;
- гибкое управление внешним видом формы через CSS, при этом есть возможность для каждого поля ввода задать id и класс;
- возможность вставить в форму произвольный HTML-код (только между полями);
- возможность задать callback-функцию для любого поля при валидации на клиенской стороне (полезно, например, когда требуется сравнить пароль и его подтверждение при регистрации пользователя);
- повышение безопасности: злоумышленник не сможет добавить в форму поля, не предусмотренные описанием (они будут просто отброшены на этапе валидации);
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Пример описания формы на YAML:
Пример кода
Небольшой пример, показывающий, как с помощью YAML Form Generator сделать простую форму входа на сайт, состоящую из четырех полей: логина, пароля, checkbox "запомнить меня" и кнопки submit. При этом есть проверка: логин может содержать только символы латиницы и цифры, о чем сразу же выдается предупреждение пользователю во избежание ввода в неправильной раскладке. Файл с описанием такой формы выглядит просто:
#id тега fieldset, в котором будет находиться форма, fieldsetов, при необходимости, может быть несколько, но для такой простой формы в этом нет никакого смысла
fset:
# начнем с элемента legend, который должен быть в каждом fieldsetе по стандарту
lg:
type: legend
descr: Вход на сайт для зарегистрированных пользователей
# часто legend показывать на самом деле не требуется, для таких случаев в YAML Form Generator можно задать для legend свойство display:
# display: none
# Поле для ввода логина (обязательным для всех полей является только свойство type
login:
# Тип поля: (полный список всех возможных типов полей см. в документации)
type: text
maxlength: 32
# Описание, которое будет выведено перед полем (рекомендуется всегда указывать, если этого не сделать, в качестве описания поля будет выведено его название, т.е. просто "login" в данном случае)
descr: Введите логин
# Значение поля по умолчанию. Оно выставляется в поле в том случае, если в хеш-массиве с исходными данными, переданном функции form_generate, отсутствует ключ, соответствующий имени поля. Если этот параметр не задавать, то значением по умолчанию является пустая строка (кроме полей типа date и calendar, для которых берется текущая дата). В данном примере поможем польователю и сразу поставим "admin"
default: admin
# Тип валидации -- на соответствие регулярному выражению (полный список всех возможных типов валидации см. в документации)
validate: regexp
# Собственно, само регулярное выражение для валидации (первый знак -- буква, потом -- цифры или буквы)
regexp: ^\w[\w\d]+$
# Текст сообщения об ошибке, который будет выдаваться, если валидация не пройдет.
# Текст можно и не указывать, тогда будет выдано сообщение об ошибке по умолчанию
validate_text: Некорректные символы в логине! Проверьте раскладку клавиатуры!
# Поле для пароля
password:
type: password
maxlength: 32
descr: Ваш пароль
# Для пароля тоже зададим валидацию: он не может быть пустым
validate: notempty
# Текст для сообщения об ошибке задавать не будем, сообщение "Поле не может быть пустым", выдаваемое по умолчанию, вполне подходит по смысл.
# А вот пример поля со сложным именем. В массивах с исходными или выходными данными оно будет доступно как $data['settings']['remember']
# Использование таких имен полезно, когда в одной форме редактируются данные о нескольких объектах сразу (например, теме форума и сообщении)
settings[remember]:
type: checkbox
descr: Запомнить меня
# Значение, которое будет отправлено, если checkox установлен
value: 1
# Значение по умолчанию, если мы хотим, чтобы checkbox был включен, выставляем его равным
submit:
type: submit
# Задаем class для того divа, в который будет помещена кнопка отправки формы. Например, для того, чтобы поставить эту кнопку по центру с помощью правила в CSS
class: sbumit
value: Войти на сайт
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Пример кода вывода и проверки формы:
<!DOCTYPE html>
<html><head>
<title>Простая демонстрация YAML Form Generator</title>
<script src="validate.js"></script><!-- подключаем файл, отвечающий за валидацию формы на стороне клиента -->
<link rel="stylesheet" type="text/css" href="validate.css"></link><!-- CSS-файл, отвечающий за внешний вид форм и сообщений об ошибках валидации -->
</head><body>
<?php
require 'Spyc.php';
require 'YamlGen.php';
$start_data=array(); // массив с исходными данными для формы. В данном случае он пуст, поскольку для формы входа не имеет смысл задавать какие-то начальные значения, но если бы мы редактировали какой-то объект (скажем, профиль пользователя), то этот массив следовало бы заполнить данными об этом объекте
if ($_SERVER['REQUEST_METHOD']=='POST') { // POST-запрос означает что пользователь заполнил форму и послал ее на сервер
list($data,$errors) = YamlGen::validate_form($_POST,'login.yml'); // обрабатываем форму, значения полей будут помещены в массив $data, ошибки -- в $errors
if (empty($errors)) { // если массив ошибок пуст, то провека формы прошла нормально
if ($data['login']=='admin' && $data['password']=='secret') { // проверка полученных из формы логина и пароля (для простоты примера здесь они сравниваются с константами)
// здесь выполняем действия при входе
session_start();
$_SESSION['login']=$data['login']; // все данные, полученные из формы, хранятся в хеше, при этом имя в хеше совпадает с именем поля (кроме случаев сложных имен, пример такого см. чуть ниже)
header('HTTP/1.0 302 Moved temporary');
header('Location: http://'.$_SERVER['HTTP_HOST'].'/page2.php');
if ($data['settings']['remember']) setcookie('user',$data['login'].'-'.md5($data['password']),"+180d"); // если пользователь выбрал "запомнить", запоминаем его данные в cookie, также показана работа с полем, имеющим сложное имя (в YAML оно описано как settings[remeber])
exit();
}
else echo '<div class="errmsg">Неправильный логин или пароль!</div>';
}
else { // если ошибки были, выведем их
for ($i=0, $count=count($errors); $i<$count; $i++) echo '<div class="errmsg">'.htmlspecialchars($errors[$i]['text'].'</div>';
}
$start_data = $_POST; // если пользователь уже отправил форму, но произошла ошибка (например, неправильный логин или пароль), поместим введенные им данные в массив с исходными данными для генератора форм, чтобы введенные пользователем значения снова оказались в форме
}
$form_html = YamlGen::generate_form($start_data,'login.yml',array()); // генерируем HTML-код формы, и выводим его
echo $form_html;
?></body></html>
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Краткое описание файлов в архиве:
YamlGen.php — основной файл, содержащий одноименный класс
Spyc.php — сторонний класс для разборки YAML-файлов
validate.js — JavaScript, используемый для валидации формы на стороне клиента
validate.css — набор CSS-стилей, отвечающих за отображение формы и предупреждений
demo.yaml — демо-файл с простейшей формой, описанной на YAML
demo.php — пример PHP-кода для генерации и валидации формы
Если у вас возникли вопросы по Yaml Form Generator, вы можете задать их в этом разделе, создав для этого отдельную тему.
YamlGen.php — основной файл, содержащий одноименный класс
Spyc.php — сторонний класс для разборки YAML-файлов
validate.js — JavaScript, используемый для валидации формы на стороне клиента
validate.css — набор CSS-стилей, отвечающих за отображение формы и предупреждений
demo.yaml — демо-файл с простейшей формой, описанной на YAML
demo.php — пример PHP-кода для генерации и валидации формы
Если у вас возникли вопросы по Yaml Form Generator, вы можете задать их в этом разделе, создав для этого отдельную тему.
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Эта тема была упомянута по адресу http://4xpro.ru/programming/forms-language/post-7006.htm
Одна страница
Распечатать Тема закрыта, новые ответы не принимаются.