PHPackages                             sqrt-pro/form - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. sqrt-pro/form

ActiveLibrary[Framework](/categories/framework)

sqrt-pro/form
=============

Form is part of SQRT Framework

0.1.3(10y ago)11.4k1MITPHPPHP &gt;=5.3.0

Since Mar 19Pushed 10y ago3 watchersCompare

[ Source](https://github.com/sqrt-pro/Form)[ Packagist](https://packagist.org/packages/sqrt-pro/form)[ Docs](http://fw.sqrt.pro)[ RSS](/packages/sqrt-pro-form/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (6)Versions (2)Used By (1)

Form
====

[](#form)

[![Build Status](https://camo.githubusercontent.com/24b92c509c25d4223bb3fd66b4cd8aa1770acf18161e9205fce74674b51fd723/68747470733a2f2f7472617669732d63692e6f72672f737172742d70726f2f466f726d2e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/sqrt-pro/Form)[![Coverage Status](https://camo.githubusercontent.com/9b0968615ec16fe93c78e373f40e6b431844665edc064539bda3d453c3044004/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f737172742d70726f2f466f726d2f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/r/sqrt-pro/Form?branch=master)[![Latest Stable Version](https://camo.githubusercontent.com/af984266008911bae2f89090543e99ee362c7ad8d62e0a0bec13562032bb0002/68747470733a2f2f706f7365722e707567782e6f72672f737172742d70726f2f666f726d2f76657273696f6e2e737667)](https://packagist.org/packages/sqrt-pro/form)[![License](https://camo.githubusercontent.com/eebe9a5b77f5c0d0817b2eeaa3e41846154e9817e7b4649d06a635a79f67ca20/68747470733a2f2f706f7365722e707567782e6f72672f737172742d70726f2f666f726d2f6c6963656e73652e737667)](https://packagist.org/packages/sqrt-pro/form)

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

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

```
$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();

```

Каждый из элементов формы - самостоятельный объект, имеющий свой набор параметров. Методы `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`:

```
$f->setBeforeValidation(
  function ($data, Form $form) {
    if ($data['status'] == 'new' && $data['age'] > 10) {
      $form->addError('Возраст новых участников должен быть меньше 10');
    }

    $data['is_active'] = 1;

    return $data;
  }
);
```

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

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

[](#результаты-валидации)

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

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

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

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

```
$f->setProcessData(
  function(Form $form){
    $data = $form->getValues();

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

Обработчик будет вызван только в случае успешной валидации.

Если форма работает с объектом `Request`, можно получить "сырые" данные `getValueFromRequest($field, $default = false)`или убедиться что значение есть в запросе `checkRequestHasValue($field)`.

### Наследование формы

[](#наследование-формы)

Если форма наследуется, для настройки полей переопределяется метод `init()`, чтобы не дублировать логику конструктора.

Обработчики до\\после валидации, а также процессинг данных также можно переопределить при наследовании:

- `beforeValidation($data)`
- `afterValidation($data)`
- `process()`

Работа с файлами
----------------

[](#работа-с-файлами)

По-умолчанию форма забирает данные из Request, если необходимо передать данные в метод `validate($data)` напрямую, файлы передаются в виде объектов `\Symfony\Component\HttpFoundation\File\File`.

Для удобства работы с файлами, поле формы имеет следующие методы, различающие объекты `File` и `UploadedFile`:

```
$f->field('image')->getExtension(); // Расширение загруженного файла
$f->field('image')->copy($destination); // Скопировать или переместить (move_uploaded_file) файл
```

Капча (Captcha)
---------------

[](#капча-captcha)

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

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

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

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity16

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

3712d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/b13b6471e4cd370ac559ab9c2616d4518c1552d91aa7685cfceedae0e61396e1?d=identicon)[sqrt-pro](/maintainers/sqrt-pro)

---

Top Contributors

[![cmsx](https://avatars.githubusercontent.com/u/2027189?v=4)](https://github.com/cmsx "cmsx (18 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/sqrt-pro-form/health.svg)

```
[![Health](https://phpackages.com/badges/sqrt-pro-form/health.svg)](https://phpackages.com/packages/sqrt-pro-form)
```

###  Alternatives

[laravel/framework

The Laravel Framework.

34.6k509.9M17.0k](/packages/laravel-framework)[symfony/framework-bundle

Provides a tight integration between Symfony components and the Symfony full-stack framework

3.6k235.4M9.7k](/packages/symfony-framework-bundle)[laravel/reverb

Laravel Reverb provides a real-time WebSocket communication backend for Laravel applications.

1.5k9.4M48](/packages/laravel-reverb)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[drupal/core

Drupal is an open source content management platform powering millions of websites and applications.

19462.3M1.3k](/packages/drupal-core)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
