PHPackages                             xeoscript/phorms - 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. xeoscript/phorms

ActiveLibrary

xeoscript/phorms
================

09CSS

Since Oct 14Pushed 12y ago1 watchersCompare

[ Source](https://github.com/xeoscript/phorms)[ Packagist](https://packagist.org/packages/xeoscript/phorms)[ RSS](/packages/xeoscript-phorms/feed)WikiDiscussions data-driven Synced 4d ago

READMEChangelogDependenciesVersions (1)Used By (0)

Changes in this branch
======================

[](#changes-in-this-branch)

tf198's changes
---------------

[](#tf198s-changes)

### Functional Changes:

[](#functional-changes)

- Fixes for Decimal, Integer, DateTime, DropDown and CheckBox fields
- Allowing override of input type in Text widget (for extended HTML5 types: date url etc...)
- Changed how values passed via *$data* parameter are handled so there is a symmetric relationship between it and the validated output of Phorm::cleaned\_data(). Before you couldn't display a form for stored data because certain fields like *Phorm\_Field\_Date* were populated by one type (string) and returned another (unix timestamp). All such fields should now provide an *export\_value($value)* method that performs the inverse of *import\_value($value)*.
- Added Range and IPv4Address fields

### Non-Functional Changes:

[](#non-functional-changes)

- Added PHPUnit tests

petsagouris's changes
---------------------

[](#petsagouriss-changes)

### Functional Changes:

[](#functional-changes-1)

- Removed client side validation to keep this library focused on PHP (not javascript)
- Added Alpha/Alphanumeric field type
- Added OptionGroup (multi-select checkbox) field type

### Non-Functional Changes:

[](#non-functional-changes-1)

- Made sure the examples (in the examples folder) were working as expected and that the code was clean.
- Note that the original branch developer has been contacted but has not responded -- this branch should probably be considered the most active.

jordanlev's changes
-------------------

[](#jordanlevs-changes)

### Functional Changes:

[](#functional-changes-2)

- Changed name of Phorm\_Field\_Numeric to Phorm\_Field\_Integer because that's what it is (numeric is misleading because php's is\_numeric() function checks for any kind of number, not just integers).
- Added $size parameter to Decimal and Integer field types instead of hard-coding "20".
- Simplified built-in 'required' validation (just add 'required' to any field's validation array) \[Implementation Details: I removed the "Validation.class.php" file because it made no sense, and replaced it with a simple built-in function that is automatically called when is\_valid() is called if the validation array contains 'required'\].
- Changed default form method from 'get' to 'post' in the Phorm\_Phorm constuctor ('post' is a more common use case so it should be the default)
- Added a display\_errors() function that can be called on your phorm object to output a list of all field errors -- useful if you want to display all errors at the top of the page instead of inline with each feild.
- Added a new public fields() function to Phorm\_Phorm class so all field objects can be retrieved and looped through.
- Text and Integer fields now set HTML maxlength attribute based on $max\_length param (in addition to existing server-side validation check).
- Bugfix: The is\_valid() function in Field.class.php now works with instance callbacks as well as function names, to match documented behaviour.

### Non-Functional Changes:

[](#non-functional-changes-2)

- Added new designed\_form.php example to demonstrate how to use the class in your own templated / designed HTML form (as opposed to an auto-generated table), and to show off the new display\_errors() and fields() functions.
- Removed getIterator() function in Phorm/Phorm.class.php becaue it wasn't doing anything (class doesn't implement IteratorAggregate)
- Removed leftover debugging call to var\_dump() in Phorm/Field/Email.class.php
- Cleaned up some function comments in Phorm/Field.class.php
- Removed docs/ directory because it was autogenerated before I made all of these changes, so it was out of date (and I haven't re-generated it with phpDocumentor yet).
- Added constant for target directory to the file\_drop.php example

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor2

2 contributors hold 50%+ of commits

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.

### Community

Maintainers

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

---

Top Contributors

[![tf198](https://avatars.githubusercontent.com/u/682654?v=4)](https://github.com/tf198 "tf198 (36 commits)")[![sodabrew](https://avatars.githubusercontent.com/u/39406?v=4)](https://github.com/sodabrew "sodabrew (15 commits)")[![jordanlev](https://avatars.githubusercontent.com/u/149992?v=4)](https://github.com/jordanlev "jordanlev (10 commits)")[![xdissent](https://avatars.githubusercontent.com/u/99367?v=4)](https://github.com/xdissent "xdissent (8 commits)")[![petsagouris](https://avatars.githubusercontent.com/u/277956?v=4)](https://github.com/petsagouris "petsagouris (6 commits)")[![gardiner](https://avatars.githubusercontent.com/u/138198?v=4)](https://github.com/gardiner "gardiner (3 commits)")[![mhyz](https://avatars.githubusercontent.com/u/53747?v=4)](https://github.com/mhyz "mhyz (2 commits)")[![sysread](https://avatars.githubusercontent.com/u/83381?v=4)](https://github.com/sysread "sysread (1 commits)")

### Embed Badge

![Health badge](/badges/xeoscript-phorms/health.svg)

```
[![Health](https://phpackages.com/badges/xeoscript-phorms/health.svg)](https://phpackages.com/packages/xeoscript-phorms)
```

PHPackages © 2026

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