Build and render HTML elements using an OOP style interface and jQuery style selectors.
- PHP >= 7.1
Use composer to add the package to your dependencies:
composer require palmtree/html<?php
use Palmtree\Html\Element;
$menu = new Element('ul.some-class');
$menuItems = [];
$menuItems[] = [
'label' => 'Home',
'href' => 'https://example.org',
];
$menuItems[] = [
'label' => 'About',
'href' => 'https://example.org/about',
];
$menuItems[] = [
'label' => 'Contact',
'href' => 'https://example.org/contact',
];
foreach ($menuItems as $item) {
$a = Element::create('a[href="' . $item['href'] . '"]')->setInnerText($item['label']);
$li = Element::create('li.item')->addChild($a);
$li->classes[] = 'item-' . strtolower($item['label']);
$menu->addChild($li);
}
$menu->attributes->setData('item_total', (string)count($menuItems));
$menu->attributes['aria-label'] = 'Navigation'
echo $menu->render();
?>Renders the following HTML:
<ul class="some-class" data-item_total="3" aria-label="Navigation">
<li class="item item-home">
<a href="https://example.org">Home</a>
</li>
<li class="item item-about">
<a href="https://example.org/about">About</a>
</li>
<li class="item item-contact">
<a href="https://example.org/contact">Contact</a>
</li>
</ul>Inner text, attribute values and class names are HTML-escaped when rendered, so untrusted input can be passed
to setInnerText() and attributes safely:
$input = new Element('input');
$input->attributes['value'] = '"><script>alert(1)</script>';
echo $input->render(); // <input value=""><script>alert(1)</script>">Use setInnerHtml() to add raw HTML. It is not escaped, so never pass untrusted input to it.
Tag and attribute names are validated rather than escaped: an \InvalidArgumentException is thrown for a name
that is not valid HTML.
Released under the MIT license