ui-awesome / html-concern
UI Awesome HTML Mixin Library for PHP.
Installs: 11 346
Dependents: 2
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/ui-awesome/html-concern
Requires
- php: ^8.1
- ui-awesome/html-helper: ^0.7
- ui-awesome/html-interop: ^0.3
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
README
Html mixin
A type-safe PHP mixin library for HTML tag rendering components
Build reusable components with traits for attributes, content, templates, and prefix/suffix management.
Features
Installation
composer require ui-awesome/html-mixin:^0.5
Quick start
Managing HTML attributes with HasAttributes
The HasAttributes trait provides a fluent, immutable API for managing HTML attributes on elements. Supports enum
keys/values, closure-based values, prefix normalization (for example aria-, data-, on), and array merging.
<?php declare(strict_types=1); namespace App\Component; use UIAwesome\Html\Mixin\HasAttributes; final class MyComponent { use HasAttributes; } $component = new MyComponent(); $component = $component ->setAttribute('id', 'my-component') ->attributes(['class' => ['container'], 'role' => 'main']) ->attributes(['label' => 'Close'], 'aria-') ->removeAttribute('role'); $component->getAttributes(); // ['id' => 'my-component', 'class' => ['container'], 'aria-label' => 'Close'] $component->getAttribute('id', 'default-id'); // 'my-component' $component->getAttribute('label', null, 'aria-'); // 'Close'
Managing content with encoding support
The HasContent trait handles both safe encoded content and raw HTML with XSS protection through Encode::content().
<?php declare(strict_types=1); namespace App\Component; use UIAwesome\Html\Mixin\HasContent; final class MyComponent { use HasContent; } $component = new MyComponent(); $encodedContent = $component ->content('<script>alert("XSS")</script>') ->getContent(); // <script>alert("XSS")</script> $component2 = new MyComponent(); $htmlContent = $component2 ->html('<strong>Raw HTML</strong>') ->getContent(); // <strong>Raw HTML</strong>
Custom templates with HasTemplate
Define custom rendering templates for your components using the HasTemplate trait.
<?php declare(strict_types=1); namespace App\Component; use UIAwesome\Html\Mixin\{HasContent, HasTemplate}; final class MyComponent { use HasContent; use HasTemplate; public function render(): string { return str_replace('{content}', $this->content, $this->template); } } $component = new MyComponent(); echo $component ->content('Card Content') ->template('<div class="card">{content}</div>') ->render(); // <div class="card">Card Content</div>
Prefix and suffix content with tag support
The HasPrefixCollection and HasSuffixCollection traits add content before and after your element, optionally wrapped
in tags with their own attributes.
Tag APIs now accept UnitEnum, so your components can use any project enum without a direct runtime dependency on
ui-awesome/html-interop.
<?php declare(strict_types=1); namespace App\Component; use UIAwesome\Html\Mixin\{HasContent, HasPrefixCollection, HasSuffixCollection}; enum InlineTag: string { case STRONG = 'strong'; case EM = 'em'; } final class MyComponent { use HasContent; use HasPrefixCollection; use HasSuffixCollection; public function render(): string { return $this->prefix . $this->content . $this->suffix; } } $component = new MyComponent(); echo $component ->content('Main Content') ->prefix('Prefix: ') ->prefixAttributes(['class' => 'prefix-badge']) ->prefixTag(InlineTag::STRONG) ->suffix(' :Suffix') ->suffixTag(InlineTag::EM) ->render(); // <strong class="prefix-badge">Prefix: </strong>Main Content<em> :Suffix</em>
Documentation
For detailed configuration options and advanced usage.