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

Что такое Yaml Form Generator

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

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

0
12 октября 2014, 16:26. Редактировалось 1 раз, последний — 12 октября 2014, 16:39#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
    Основатель проекта
    Всего сообщений: 240
    Зарегистрирован: 22 сен 2014, 18:56
    Откуда: Москва, Перово
    Рейтинг пользователя: 6

    0
    12 октября 2014, 16:27#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
      Основатель проекта
      Всего сообщений: 240
      Зарегистрирован: 22 сен 2014, 18:56
      Откуда: Москва, Перово
      Рейтинг пользователя: 6

      0
      12 октября 2014, 16:29#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
        Основатель проекта
        Всего сообщений: 240
        Зарегистрирован: 22 сен 2014, 18:56
        Откуда: Москва, Перово
        Рейтинг пользователя: 6

        0
        12 октября 2014, 16:34#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.

          Одна страница
          Распечатать

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

          0: Контрольная точка "Конец инициализации". Время выполнения: 0.001. Запросов: 8, время запроса: 0.001 (50.81)%. Памяти использовано: 520000 байтов

          0: Контрольная точка "Фиксация действия пользователя выполнена". Время выполнения: 0.002. Запросов: 10, время запроса: 0.001 (55.08)%. Памяти использовано: 520328 байтов

          0: Контрольная точка "Основное действие выполнено". Время выполнения: 0.005. Запросов: 17, время запроса: 0.002 (47.26)%. Памяти использовано: 695832 байтов

          0: Контрольная точка "Вспомогательные действия выполнены". Время выполнения: 0.005. Запросов: 21, время запроса: 0.003 (49.78)%. Памяти использовано: 712488 байтов

          0: Контрольная точка "После срабатывания шаблонизатора.". Время выполнения: 0.009. Памяти использовано: 1019336 байтов