PHPackages                             yiisoft/form-model - 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. yiisoft/form-model

ActiveLibrary[Framework](/categories/framework)

yiisoft/form-model
==================

Provides a base for form models and helps to fill, validate and display them.

1.1.1(3mo ago)1750.5k↑40%8[6 issues](https://github.com/yiisoft/form-model/issues)[2 PRs](https://github.com/yiisoft/form-model/pulls)6BSD-3-ClausePHPPHP 8.1 - 8.5CI passing

Since Aug 27Pushed 1w ago13 watchersCompare

[ Source](https://github.com/yiisoft/form-model)[ Packagist](https://packagist.org/packages/yiisoft/form-model)[ Docs](https://www.yiiframework.com/)[ GitHub Sponsors](https://github.com/sponsors/yiisoft)[ OpenCollective](https://opencollective.com/yiisoft)[ RSS](/packages/yiisoft-form-model/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (5)Dependencies (29)Versions (9)Used By (6)

 [ ![Yii](https://camo.githubusercontent.com/8317c17418b39410a660f5149071d26c5023c0d5fb2b7ebb771324812f666d73/68747470733a2f2f796969736f66742e6769746875622e696f2f646f63732f696d616765732f7969695f6c6f676f2e737667) ](https://github.com/yiisoft)

Yii Form Model
==============

[](#yii-form-model)

[![Latest Stable Version](https://camo.githubusercontent.com/8c3fb837616f3024f906a421ca8f22a0bf0164d28a76a93b078672945a076c73/68747470733a2f2f706f7365722e707567782e6f72672f796969736f66742f666f726d2d6d6f64656c2f76)](https://packagist.org/packages/yiisoft/form-model)[![Total Downloads](https://camo.githubusercontent.com/7e882487a5518ae99c00858bfa99a92506fcc0a1b7fdde58ccdaeb17c3b7fac0/68747470733a2f2f706f7365722e707567782e6f72672f796969736f66742f666f726d2d6d6f64656c2f646f776e6c6f616473)](https://packagist.org/packages/yiisoft/form-model)[![Build status](https://github.com/yiisoft/form-model/actions/workflows/build.yml/badge.svg)](https://github.com/yiisoft/form-model/actions/workflows/build.yml)[![Code Coverage](https://camo.githubusercontent.com/bc9865c90da3826e04a1d3d256fe96847a479fcea11c27845010f0016b8f3ce9/68747470733a2f2f636f6465636f762e696f2f67682f796969736f66742f666f726d2d6d6f64656c2f6272616e63682f6d61737465722f67726170682f62616467652e737667)](https://codecov.io/gh/yiisoft/form-model)[![Mutation testing badge](https://camo.githubusercontent.com/7fe36a1f8826b5214b2c51ec1fa1ab632b8b9a38266d0c1139591cf038dbad61/68747470733a2f2f696d672e736869656c64732e696f2f656e64706f696e743f7374796c653d666c61742675726c3d687474707325334125324625324662616467652d6170692e737472796b65722d6d757461746f722e696f2532466769746875622e636f6d253246796969736f6674253246666f726d2d6d6f64656c2532466d6173746572)](https://dashboard.stryker-mutator.io/reports/github.com/yiisoft/form-model/master)[![static analysis](https://github.com/yiisoft/form-model/workflows/static%20analysis/badge.svg)](https://github.com/yiisoft/form-model/actions?query=workflow%3A%22static+analysis%22)[![type-coverage](https://camo.githubusercontent.com/2f8ab99320874604f403d173862d89ec4c995927345d55296a4480cd61b319ed/68747470733a2f2f73686570686572642e6465762f6769746875622f796969736f66742f666f726d2d6d6f64656c2f636f7665726167652e737667)](https://shepherd.dev/github/yiisoft/form-model)[![psalm-level](https://camo.githubusercontent.com/d9a784dc7089ade2a15b32f67ce65b386f3b8960343a7fd950cd1a826808964e/68747470733a2f2f73686570686572642e6465762f6769746875622f796969736f66742f666f726d2d6d6f64656c2f6c6576656c2e737667)](https://shepherd.dev/github/yiisoft/form-model)

The package provides a base for form models and helps to fill them with data, validate them and display them.

Requirements
------------

[](#requirements)

- PHP 8.1 - 8.5.
- `mbstring` PHP extension.

Installation
------------

[](#installation)

The package could be installed with [Composer](https://getcomposer.org):

```
composer require yiisoft/form-model
```

General usage
-------------

[](#general-usage)

Define a [form model](docs/guide/en/form-model.md):

```
use Yiisoft\FormModel\Attribute\Safe;
use Yiisoft\FormModel\FormModel;
use Yiisoft\Validator\Rule\Email;
use Yiisoft\Validator\Rule\Length;
use Yiisoft\Validator\Rule\Required;

final class LoginForm extends FormModel
{
    #[Label('Your login')]
    #[Required]
    #[Length(min: 4, max: 40, skipOnEmpty: true)]
    #[Email(skipOnEmpty: true)]
    private ?string $login = null;

    #[Label('Your password')]
    #[Required]
    #[Length(min: 8, skipOnEmpty: true)]
    private ?string $password = null;

    #[Label('Remember me for 1 week')]
    #[Safe]
    private bool $rememberMe = false;
}
```

Fill it with data and validate using [form hydrator](docs/guide/en/form-hydrator.md):

```
use Psr\Http\Message\RequestInterface;
use Yiisoft\FormModel\FormHydrator;
use Yiisoft\FormModel\FormModel;

final class AuthController
{
    public function login(RequestInterface $request, FormHydrator $formHydrator): ResponseInterface
    {
        $formModel = new LoginForm();
        $errors = [];
        if ($formHydrator->populateFromPostAndValidate($formModel, $request)) {
            $errors = $formModel->getValidationResult()->getErrorMessagesIndexedByProperty();
        }

        // You can pass $formModel and $errors to the view now.
    }
}
```

Display it using [fields](docs/guide/en/displaying-fields.md) in the view:

```
use Yiisoft\FormModel\Field;
use Yiisoft\FormModel\FormModel;

echo Field::text($formModel, 'login');
echo Field::password($formModel, 'password');
echo Field::checkbox($formModel, 'rememberMe');

// ...
```

Documentation
-------------

[](#documentation)

- [Guide](docs/guide/en/README.md)
- [Internals](docs/internals.md)

If you need help or have a question, the [Yii Forum](https://forum.yiiframework.com/c/yii-3-0/63) is a good place for that. You may also check out other [Yii Community Resources](https://www.yiiframework.com/community).

License
-------

[](#license)

The Yii Form Model is free software. It is released under the terms of the BSD License. Please see [`LICENSE`](./LICENSE.md) for more information.

Maintained by [Yii Software](https://www.yiiframework.com/).

Support the project
-------------------

[](#support-the-project)

[![Open Collective](https://camo.githubusercontent.com/a2b15f8e2268d4e3842e00d41ff7a57cce2ad8bd8d8769c5dc4fa05a546a4f62/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4f70656e253230436f6c6c6563746976652d73706f6e736f722d3765616466313f6c6f676f3d6f70656e253230636f6c6c656374697665266c6f676f436f6c6f723d376561646631266c6162656c436f6c6f723d353535353535)](https://opencollective.com/yiisoft)

Follow updates
--------------

[](#follow-updates)

[![Official website](https://camo.githubusercontent.com/d6b0929173e28cc627430d2519ca1853466a70f37395877eaf4820cb3e1e1909/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506f77657265645f62792d5969695f4672616d65776f726b2d677265656e2e7376673f7374796c653d666c6174)](https://www.yiiframework.com/)[![Twitter](https://camo.githubusercontent.com/d077c362ac639792171af8bc002ee827816733dfc0925f70b557e6d151022226/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f747769747465722d666f6c6c6f772d3144413146323f6c6f676f3d74776974746572266c6f676f436f6c6f723d314441314632266c6162656c436f6c6f723d3535353535353f7374796c653d666c6174)](https://twitter.com/yiiframework)[![Telegram](https://camo.githubusercontent.com/4e38dd12535575c39c65bea7119b95e663abb2d1f4e3d669a27bbda07ef603f0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74656c656772616d2d6a6f696e2d3144413146323f7374796c653d666c6174266c6f676f3d74656c656772616d)](https://t.me/yii3en)[![Facebook](https://camo.githubusercontent.com/48204e301b34b29b0815854544f04c337fc0692096cab35e9a1f8c53a42c2307/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f66616365626f6f6b2d6a6f696e2d3144413146323f7374796c653d666c6174266c6f676f3d66616365626f6f6b266c6f676f436f6c6f723d666666666666)](https://www.facebook.com/groups/yiitalk)[![Slack](https://camo.githubusercontent.com/1a3645ba1c97e6684d0349bc478201e1621ba0d3efad516d81035364d442bad7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736c61636b2d6a6f696e2d3144413146323f7374796c653d666c6174266c6f676f3d736c61636b)](https://yiiframework.com/go/slack)

###  Health Score

56

—

FairBetter than 97% of packages

Maintenance83

Actively maintained with recent releases

Popularity41

Moderate usage in the ecosystem

Community30

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 62.2% 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

Every ~142 days

Total

5

Last Release

105d ago

PHP version history (3 changes)1.0.0PHP ^8.1

1.0.2PHP 8.1 - 8.4

1.1.0PHP 8.1 - 8.5

### Community

Maintainers

![](https://www.gravatar.com/avatar/fc29e4e7068a00fe9b9db37b8aadda1db6020adcacef810461e47b99c2b150e6?d=identicon)[samdark](/maintainers/samdark)

![](https://www.gravatar.com/avatar/53e5ee1dedd50f71e4aeeac2929f786cdfb400359d4776e6cd806388d0d5df2c?d=identicon)[vjik](/maintainers/vjik)

---

Top Contributors

[![vjik](https://avatars.githubusercontent.com/u/525501?v=4)](https://github.com/vjik "vjik (46 commits)")[![arogachev](https://avatars.githubusercontent.com/u/8326201?v=4)](https://github.com/arogachev "arogachev (12 commits)")[![luizcmarin](https://avatars.githubusercontent.com/u/67489841?v=4)](https://github.com/luizcmarin "luizcmarin (4 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (4 commits)")[![m1n64](https://avatars.githubusercontent.com/u/24874264?v=4)](https://github.com/m1n64 "m1n64 (2 commits)")[![samdark](https://avatars.githubusercontent.com/u/47294?v=4)](https://github.com/samdark "samdark (2 commits)")[![mspirkov](https://avatars.githubusercontent.com/u/63721828?v=4)](https://github.com/mspirkov "mspirkov (1 commits)")[![Mister-42](https://avatars.githubusercontent.com/u/68641750?v=4)](https://github.com/Mister-42 "Mister-42 (1 commits)")[![glpzzz](https://avatars.githubusercontent.com/u/13596248?v=4)](https://github.com/glpzzz "glpzzz (1 commits)")[![StyleCIBot](https://avatars.githubusercontent.com/u/11048387?v=4)](https://github.com/StyleCIBot "StyleCIBot (1 commits)")

---

Tags

formformsyii3modelform

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm, Rector

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/yiisoft-form-model/health.svg)

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

###  Alternatives

[symfony/symfony

The Symfony PHP framework

31.4k87.2M2.2k](/packages/symfony-symfony)[aws/aws-sdk-php

AWS SDK for PHP - Use Amazon Web Services in your PHP project

6.3k543.5M2.6k](/packages/aws-aws-sdk-php)[cakephp/cakephp

The CakePHP framework

8.9k19.5M1.8k](/packages/cakephp-cakephp)[neuron-core/neuron-ai

The PHP Agentic Framework.

2.0k656.1k38](/packages/neuron-core-neuron-ai)[bref/bref

Bref is a framework to write and deploy serverless PHP applications on AWS Lambda.

3.4k10.6M67](/packages/bref-bref)[tempest/framework

The PHP framework that gets out of your way.

2.2k34.4k15](/packages/tempest-framework)

PHPackages © 2026

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