2017 © Pedro Peláez
 

library form

Form is part of SQRT Framework

image

sqrt-pro/form

Form is part of SQRT Framework

  • Saturday, March 19, 2016
  • by sqrt-pro
  • Repository
  • 3 Watchers
  • 1 Stars
  • 1,196 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 2 % Grown

The README.md

Form

Build Status Coverage Status Latest Stable Version License, (*1)

Компонент Form позволяет проверять данные, приходящие от пользователя, отображать компоненты формы, а также выполнять пост-обработку этих данных., (*2)

Работа с формой начинается с формирования полей, из которых она состоит, а также их настройки. Например:, (*3)

~~~ php, (*4)

$f = new Form($request); $f->addInput('name', 'Имя') ->addFilter('!^[a-z]+$!i'); $f->addCheckbox('is_active', 'Вкл'); $f->addSelect('status', 'Статус', array('new' => 'Новый', 'old' => 'Старый')); $f->addFile('image', 'Изображение') ->setIsRequired();, (*5)


Каждый из элементов формы - самостоятельный объект, имеющий свой набор параметров. Методы `add*` возвращают объект созданного элемента, соответственно можно сразу указать необходимые свойства и фильтры. ## Элементы формы: * Input * Password * Checkbox * Radio * Select * Textarea * File При желании, можно создавать свои элементы формы, наследующие класс `SQRT\Form\Element` и добавлять их в форму через метод `$f->add()`. После этого можно получить доступ ко всем полям формы с помощью `$f->getFields()`, или выборочно `$f->field('name')`; Каждый из элементов реализует метод `render()`, который возвращает объект `Tag` с соответствующим полю отображением. ## Валидация ### Настройка формы Для проверки данных существуют следующие возможности, настраиваемые для каждого из элементов формы: * `setIsRequired()` - поле обязательно для заполнения * `addFilter($filter)` - Фильтрация данных с помощью регулярного выражения, callable или массива допустимых опций. Если нужна более сложная логика, можно добавить проверки до и после валидации, с помощью добавления соответствующих callable-объектов в методах `setBeforeValidation` и `setAfterValidation`: ~~~ php $f->setBeforeValidation( function ($data, Form $form) { if ($data['status'] == 'new' && $data['age'] > 10) { $form->addError('Возраст новых участников должен быть меньше 10'); } $data['is_active'] = 1; return $data; } );

В функцию передается массив данных, соответствующий списку полей и объект формы. Функция обязательно должна вернуть массив с данными, при этом можно их изменять перед следующим этапом валидации., (*6)

Результаты валидации

После создания формы можно проверить данные поступившие от пользователя: $f->validate($data = null)., (*7)

При создании объекта формы в него передается объект Request, из которого по-умолчанию форма получает данные пользователя. При желании, можно передать данные напрямую в метод валидации., (*8)

Если данные не проходят валидацию, можно получить список ошибок формы с помощью $f->getErrors(), или проверить состояние формы с помощью $f->isValid()., (*9)

После валидации можно либо просто забрать "чистые" данные с помощью $f->getValues() или $f->getValue($field), либо добавить обработчик в саму форму:, (*10)

~~~ php $f->setProcessData( function(Form $form){ $data = $form->getValues();, (*11)

try {
    // Действия с данными    
} catch (\Exception $e) {
    $form->addError($e->getMessage());
}

} );, (*12)


Обработчик будет вызван только в случае успешной валидации. Если форма работает с объектом `Request`, можно получить "сырые" данные `getValueFromRequest($field, $default = false)` или убедиться что значение есть в запросе `checkRequestHasValue($field)`. ### Наследование формы Если форма наследуется, для настройки полей переопределяется метод `init()`, чтобы не дублировать логику конструктора. Обработчики до\после валидации, а также процессинг данных также можно переопределить при наследовании: * `beforeValidation($data)` * `afterValidation($data)` * `process()` ## Работа с файлами По-умолчанию форма забирает данные из Request, если необходимо передать данные в метод `validate($data)` напрямую, файлы передаются в виде объектов `\Symfony\Component\HttpFoundation\File\File`. Для удобства работы с файлами, поле формы имеет следующие методы, различающие объекты `File` и `UploadedFile`: ~~~ php $f->field('image')->getExtension(); // Расширение загруженного файла $f->field('image')->copy($destination); // Скопировать или переместить (move_uploaded_file) файл

Капча (Captcha)

Для включения проверки капчи в форме нужно вызвать метод $f->enableCaptcha($name = 'captcha'). Параметр $name указывает имя переменной в сессии и имя поля в форме. Можно отключить капчу передав $name равным false., (*13)

Скрипт, отображающий капчу пользователю, должен записать в сессию текущее значение капчи. В форме всегда используется сессия из переданного Request., (*14)

Текст сообщения о неверно указанной капче можно изменить с помощью $f->setErrCaptcha($err_captcha)., (*15)

The Versions