validaide/html-builder

PHP Library providing a fluent interface to generate small snippets of HTML

Maintainers

👁 validaide

Package info

github.com/validaide/html-builder

pkg:composer/validaide/html-builder

Statistics

Installs: 66 069

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 4

7.8.0 2025-11-19 15:11 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT f2b38dc159693405ff51b7cf4fe6e9afb64bc25b

  • Mark Bijl <mark.bijl.woop@validaide.com>

README

Validaide's HTML builder is a small library with a fluent interface to generate snippets of HTML code.

Introduction

Alright, so some might say: "Why in God's name would you need such a thing!?". And indeed, we have, I don't know, awesome stuff like Twig, right!? And you are right! I ❤️ Twig! But in turns out our code base still finds itself with small helper methods that generate tiny snippets of HTML.

Take the example below:

public function userStateToIcon(User $user): string
{
 return sprintf('<span class="%s" id="%s" data-username="%s"></span>', strtolower($user->getState()), $user->getId(), $user->getUsername()):
}

Now, despite that the above can be optimized still, the last return statement is the one we are trying to simplify:

public function userStateToIcon(User $user): HTMLTag
{
 return HTML::create('span')
 ->class(strtolower($user->getState())
 ->id($user->getId())
 ->attr('data-username',$user->getUsername());
}

Now, in number of characters written, it is not necessarily faster, but it will ensure:

  1. Valid HTML is generated
  2. Safe HTML is generated
  3. Easier modification of the 'HTML' being built afterwards

Installation

Our big friend Composer to the rescue using Packagist of course:

composer require validaide/html-builder

❤️ Composer ❤️ Packagist

Examples

  1. Plain tag:
    HTML::create('span')
    <span></span>
  2. Plain tag with content:
    HTML::create('h1')->text('Heading 1');
    <h1>Heading 1</h1>
  3. Nested tags:
    HTML::create('div')->id('div-1)->tag('div')->id('div-2);
    <div id="div-1"><div id="div-2"></div></div>