pear/html_quickform2
HTML_QuickForm2 is a PHP library for creating, validating, and rendering HTML forms, with server-side and client-side validation, multipage wizards, and pluggable elements and renderers.
HTML_QuickForm / HTML_QuickForm_Controller code. A PM can fund a mechanical migration (same mental model, migration guide provided) instead of a rewrite, de-risking a platform upgrade to PHP 8.x without touching product behavior.Consider it when:
HTML_QuickForm / HTML_QuickForm_Controller code and want the lowest-behavior-change path to supported PHP. This is the strongest case by far.Look elsewhere when:
FormRequest, Blade components, old()/error bags, and CSRF — the overlap is large and the integration glue is yours to own forever. pear/html_quickform2 is not Laravel-aware: no service provider, no facade, no Blade directives, no config publishing. The documented integration is "instantiate in a controller, {!! $form->display() !!} in a view" — which means you hand-roll CSRF fields, repopulation, error presentation, and escaping discipline.email/number/url types, constraint attributes, <fieldset>/ARIA patterns to spec). README says HTML5 support is planned; plan around it not existing.Adoption gate (recommend all four before saying yes): a named internal owner for the dependency; a written position that this is a contained utility, not a platform standard; a conformance test asserting rendered markup and validation messages so a future major bump can be caught; and an exit plan (forms are defined in code you control, so migration to Blade/Livewire is bounded).
For executives (one paragraph): We evaluated pear/html_quickform2, a mature PHP library for building, validating, and rendering HTML forms. It is stable, Composer-installable, actively kept current with modern PHP (v2.5.0 is verified clean on PHP 8.5/8.6), and needs no JavaScript framework. Its value is narrow and real: it is the fastest, lowest-risk route off legacy PEAR form code, and it handles complex dynamic and multi-step forms well. It is not a strategic platform choice — small community (23 GitHub stars, no dependent packages), maintenance-only release cadence, and missing HTML5 form support. Recommendation: adopt tactically where we already have legacy form code or need config-driven server-rendered forms; do not standardize on it, and do not use it for customer-facing flows without an assigned owner. For new Laravel work, our default remains Laravel's native validation plus Blade.
For engineering leads: The appeal is a single coherent abstraction — element tree, filter/rule engine (and/or composition), and a pluggable renderer — with a dependency-free JS layer, so no bundler or framework surface is added. Cost of entry is one composer require; minimum PHP is 7.1. Costs you must budget: no Laravel integration (CSRF, repopulation via exportValues()/importValues(), error display, and output escaping are all manual), HTML5 element support is roadmap-only, and you own custom element/validator/renderer code — which is exactly where the PHP 8.5 null-array-offset and PHP 8.6 spl_object_hash() deprecations will surface. Keep PHPUnit and phpunit-polyfills current and run Psalm in CI so a red build isn't misread as a library regression. Treat renderer output as an interface: pin it with snapshot tests.
Framing that lands: "This is a buy-to-retire-risk decision, not a buy-to-build-faster decision." It buys us a safe PHP upgrade path and a proven forms engine for internal and legacy surfaces, at the price of accepting a small, single-maintainer dependency we must own. That trade is clearly worth it for migration work and clearly not worth it for greenfield product surfaces, where Laravel's own stack is cheaper, better supported, and more hireable.
How can I help you explore Laravel packages today?