ui-awesome / html-helper
UI Awesome HTML Helpers Library for PHP.
Installs: 38 202
Dependents: 14
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/ui-awesome/html-helper
Requires
- php: ^8.1
- ext-mbstring: *
Requires (Dev)
- infection/infection: ^0.27|^0.32
- maglnet/composer-require-checker: ^4.1
- php-forge/coding-standard: ^0.1
- php-forge/support: ^0.3
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.1
- phpstan/phpstan-strict-rules: ^2.0.3
- phpunit/phpunit: ^10.5
This package is auto-updated.
Last update: 2026-02-15 16:41:54 UTC
README
Html helper
A powerful PHP library to simplify HTML element creation
Generate attributes, encode content, sanitize HTML, and manage CSS classes with ease.
Features
Installation
composer require ui-awesome/html-helper:^0.5
Quick start
Attribute key normalization
Ensures attribute keys have the correct prefix (like aria-, data-, or on), supporting strings, Enums, and
Stringables.
<?php declare(strict_types=1); namespace App; use UIAwesome\Html\Helper\AttributeBag; // normalize string key (adds prefix if missing) echo AttributeBag::normalizeKey('label', 'aria-'); // aria-label // normalize Enum key echo AttributeBag::normalizeKey(Data::ACTION, 'data-'); // data-action // normalize event (flexible prefixing) echo AttributeBag::normalizeKey('click', 'on'); // onclick
Attribute bag operations
Use AttributeBag to query and mutate an attribute array in-place with a minimal API (get(), merge(),
remove(), set(), setMany()).
<?php declare(strict_types=1); namespace App; use UIAwesome\Html\Helper\AttributeBag; $attributes = ['id' => 'submit']; // merge arrays (later values override; merge is raw โ no key normalization or `null` filtering) AttributeBag::merge( $attributes, [ 'class' => ['btn', 'btn-primary'], 'type' => 'submit', ], ); // get with fallback default $type = AttributeBag::get($attributes, 'type', 'button'); // get with prefix normalization $label = AttributeBag::get($attributes, 'label', null, 'aria-'); // remove unwanted keys AttributeBag::remove($attributes, 'readonly'); // set values (closures are resolved) AttributeBag::set($attributes, 'disabled', true); AttributeBag::set($attributes, 'id', static fn () => 'submit'); // set one key (raw value) AttributeBag::set($attributes, 'aria-label', 'Save'); // booleans for `aria`, `data`, and `on*` attributes are stored as literal strings AttributeBag::set($attributes, 'expanded', true, 'aria-'); // $attributes['aria-expanded'] === 'true' // set many keys at once (useful for trait-driven prefixed attributes) AttributeBag::setMany( $attributes, [ 'data-toggle' => 'modal', 'onclick' => 'handleClick()', ], ); // remove a key explicitly AttributeBag::remove($attributes, 'id');
Universal Stringable support
Pass your domain objects directly to helpers like Encode, Attributes, or CSSClass. The library automatically
handles __toString().
<?php declare(strict_types=1); namespace App; use UIAwesome\Html\Helper\Encode; class User implements \Stringable { public function __construct(private string $name) {} public function __toString(): string { return $this->name; } } $user = new User('<John Doe>'); // automatically casts and safely encodes echo Encode::content($user); // <John Doe>
Rendering HTML attributes
Use Attributes::render() to generate a safe, escaped HTML attribute string from an array. It automatically handles class arrays, style arrays, and data-* expansions.
<?php declare(strict_types=1); namespace App; use UIAwesome\Html\Helper\Attributes; ?> <?= Attributes::render( [ 'id' => 'submit-btn', // automatically joined 'class' => ['btn', 'btn-primary'], // `true` booleans are rendered as valueless attributes 'disabled' => true, // `false` booleans are skipped 'readonly' => false, // JSON encoded automatically 'data' => [ 'id' => 42, 'options' => ['modal' => true], ], 'style' => [ 'color' => '#fff', 'margin-top' => '10px' ], ] ) ?> // class="btn btn-primary" id="submit-btn" disabled data-id="42" data-options='{"modal":true}' style='color: #fff; margin-top: 10px;'
Advanced: DOM & SVG Integration
When working with DOMDocument, SimpleXMLElement, or other XML/SVG builders, you should not use pre-escaped strings to avoid "double escaping" (for example, &lt;).
Use Attributes::normalizeAttributes() with encode: false to get a flat array of raw values ready for insertion.
use UIAwesome\Html\Helper\Attributes; $attributes = [ 'class' => ['icon', ButtonType::PRIMARY], 'data-config' => ['key' => '<val>'], 'title' => '<Safe Title>', ]; // Get raw values (encode: `false`) $rawAttributes = Attributes::normalizeAttributes($attributes, encode: false); // [ // 'class' => 'icon btn-primary', // 'data-config' => '{"key":"<val>"}' // 'title' => '<Safe Title>', // ] // Perfect for DOMDocument foreach ($rawAttributes as $name => $value) { // DOMDocument handles the escaping automatically here $domElement->setAttribute($name, $value); }
Managing CSS classes
Allows you to merge, add, or override CSS classes within an attributes array smartly.
<?php declare(strict_types=1); namespace App; use UIAwesome\Html\Helper\CSSClass; $attributes = ['class' => 'base-class']; // add new classes (merges efficiently) CSSClass::add($attributes, ['text-center', 'mt-5']); // override existing classes CSSClass::add($attributes, 'alert alert-danger', true); echo $attributes['class']; // alert alert-danger
Encoding
Ensures your content and attribute values are safe from XSS.
<?php declare(strict_types=1); namespace App; use UIAwesome\Html\Helper\Encode; // safe Content echo Encode::content('<script>alert("xss")</script>'); // <script>alert("xss")</script> // safe Attribute Value echo Encode::value('Name "Quote"'); // Name "Quote"
Enum normalization
Normalizes values against a predefined set, supporting both arrays and Enums.
<?php declare(strict_types=1); namespace App; use App\Enums\Status; use UIAwesome\Html\Helper\Enum; // normalize array of Enums $result = Enum::normalizeArray([Status::ACTIVE, Status::INACTIVE]); // ['active', 'inactive'] // normalize mixed array $result = Enum::normalizeArray(['foo', Status::ACTIVE, 42]); // ['foo', 'active', 42] // normalize value from Enum Enum::normalizeValue(Status::ACTIVE); // 'active' // normalize value from mixed Enum::normalizeValue('foo'); // 'foo'
Form naming & IDs
Generates standard PHP form names and valid HTML IDs, handling arrayable and nested properties effortlessly.
<?php declare(strict_types=1); namespace App; use UIAwesome\Html\Helper\Naming; // generate input name (Nested) echo Naming::generateInputName('User', 'profile[0][email]'); // User[profile][0][email] // generate input ID (Sanitized) echo Naming::generateInputId('User', 'profile[0][email]'); // user-profile-0-email // convert regex to pattern echo Naming::convertToPattern('/^[a-z]+$/i'); // ^[a-z]+$
Template rendering
Performs clean token replacement with normalized line endings.
<?php declare(strict_types=1); namespace App; use UIAwesome\Html\Helper\Template; echo Template::render("Hello, {name}!", ['{name}' => 'Yii3']); // Hello, Yii3!
Line break normalization
Collapses multiple line breaks into a single \n, useful for cleaning up user input or generated text.
<?php declare(strict_types=1); namespace App; use UIAwesome\Html\Helper\LineBreakNormalizer; echo LineBreakNormalizer::normalize("Hello\n\n\nWorld"); // Hello\nWorld
Validation
Enforces strict types and approved values for your HTML logic.
<?php declare(strict_types=1); namespace App; use UIAwesome\Html\Helper\Validator; // validate integer-like string $isValid = Validator::intLike('123', 0, 1000); // validate against allowed list (supports Enums) Validator::oneOf('sm', ['sm', 'md', 'lg'], 'size'); // passes // validate positive-like number $isPositive = Validator::positiveLike('42.5', 0, 100); // true // validate SVG offset-like values (ratio: 0..1, percent: 0%..100%) $isOffsetValid = Validator::offsetLike('50%'); // true
Documentation
For detailed configuration options and advanced usage.
- ๐ก Usage Examples
- ๐งช Testing Guide
- ๐ ๏ธ Development Guide