Intellect Board Pro
Расширяемый движок форума с разделами разных типов
Объявление
Началось открытое тестирование версии 3.05 RC1
Перейти к скачиванию
Привет, гость!

Что такое Yaml Form Generator

Описание возможностей и примеры использования

Настройки отображения темы Показывать по сообщений с сортировкой .
Выводить , отправленные .
Одна страница
Распечатать
4X_Pro
Основатель проекта
Всего сообщений: 396
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
. Редактировалось 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, числовых данных) в удобный для сохранения в базу данных вид, проверка и сохранение загруженных файлов. Пример описания формы и кода ее обработки см. ниже.

Основные возможности:
  • автоматическое заполнение формы исходными данными или значениями по умолчанию, выставление выбранными нужных значений в полях типа 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-функцию для любого поля при валидации на клиенской стороне (полезно, например, когда требуется сравнить пароль и его подтверждение при регистрации пользователя);
  • повышение безопасности: злоумышленник не сможет добавить в форму поля, не предусмотренные описанием (они будут просто отброшены на этапе валидации);
Примечание: в YAML Form Generator используется сторонний класс Spyc для разбора YAML-файлов. Он также распространяется по лицензии MIT.

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

4X_Pro
Основатель проекта
Всего сообщений: 396
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
#2
Пример описания формы на 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.

4X_Pro
Основатель проекта
Всего сообщений: 396
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
#3
Пример кода вывода и проверки формы:
<!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.

4X_Pro
Основатель проекта
Всего сообщений: 396
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15

0
#4
Краткое описание файлов в архиве:
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
Одна страница
Распечатать

Тема закрыта, новые ответы не принимаются.